Разобрать динамический элемент json в то же поле

Я пытаюсь преобразовать ответ json в список лиц. Это решение работает, но, возможно, есть лучшее решение для его анализа. (Я не могу изменить структуру ответа, но я могу изменить человека, если это необходимо)

Json-ответ:

{ "name1": { "address": "abc", "city": "xy" }, "name2": { "address": "abcdef", "city": "xyzzzz" } }

Мой человек:

class Person{
name:string;
city:string;
address:string;

constructor(name: string, city: string, address: string) {
    this.name = name;
    this.city = city;
    this.address = address;
}

}

Мой пример реализации:

const value = JSON.parse(data);
const arr:Person[] = [];
for (var key in value) {
    if (value.hasOwnProperty(key)) {
        arr.push(new Person(key, value[key].city, value[key].address));
    }
}

person pL4Gu33    schedule 04.05.2020    source источник


Ответы (1)


JSON.parse опасен, вы должны использовать try catch

let value
try { 
  value = JSON.parse(data);
} catch (err) {
  value = {};
}

const arr:Person[] = Object.keys(value)
.map(key => new Person(key, value[key].city, value[key].address));
person Alexey Sviridov    schedule 04.05.2020
comment
да, это был только пример кода, показывающий проблему/решение... в реальном приложении у меня есть попытка/поймать его... но все равно спасибо :)) - person pL4Gu33; 04.05.2020
comment
см. также пример синтаксического анализа - person Alexey Sviridov; 04.05.2020