Как указано в комментариях, проблема в том, что ваша структура JSON использует запись для представления списка людей (с именами в качестве ключа).Если вы можете изменить его, как предложено в комментарии, то это, вероятно, лучший подход.
В качестве альтернативы, вы все равно можете прочитать это с помощью F # Data, используя провайдер типов для определения типа для человека:
type Person = JsonProvider<"""{
"Age": 30,
"Address": { "City": "New York", "State": "NY" }
}""">
Теперь, предполагая, что input
является вашей входной строкой с несколькими людьми, вы можете прочитать ее с помощью парсера JsonValue
, выполнить итерации по всем полям записей верхнего уровня вручную, но затем проанализировать отдельных людей в вашем JSONиспользуя ваш новый Person
тип:
[ for name, person in JsonValue.Parse(input).Properties() ->
name, Person.Root(person) ]
Это дает вам список кортежей, содержащих имя и типизированный объект для каждого человека (и вы получаете обычные преимущества поставщиков типов, то есть вы можете получить доступ к адресуи возраст, используя .
)