Reputation: 1300
I have a json model that looks like this
{
"loggers" : {
"logger1" : {
"name" : "logger1",
"level" : "DEBUG",
"sub_loggers" :{
"logger1.nested_logger1" : {
"name": "logger1.nested_logger1",
"level": "INFO"
},
"logger1.nested_logger2" : {
"name": "logger1.nested_logger2",
"level": "INFO",
"sub_loggers": {
"logger1.nested_logger2.more_of_that" : {
"name": "logger1.nested_logger2.more_of_that",
"level": "INFO"
}
}
}
}
},
"logger2" : {
"name": "logger2",
"level": "WARN"
}
}
}
I want to save the model as I receive it from a HTTP request in a variable, but I want it to be mapped, so I don't have to use any
.
If there's a way to separate it into 2 models, I'd want that even more,
I just don't know how to map it because sub_loggers
is not an array, it's an object who's key names are also the names of the loggers they represent.
Upvotes: 1
Views: 371
Reputation: 164297
Here's one option:
type Level = "DEBUG" | "INFO" | "WARN" | "ERROR";
type Loggers = {
[name: string]: Logger;
}
interface Logger {
name: string;
level: Level;
sub_loggers?: Loggers;
}
let json = YOUR_JSON as { loggers: Loggers };
let loggers: Loggers = json["loggers"];
To answer your comment questions:
?
marks an optional property.Upvotes: 2