如何处理JSON文件中的缺失数据?使用数据列表,您只需使用地图功能即可。但是对象呢
说我有样本数据:
{
"Person":{
"FirstName":"John",
"LastName":"Doe",
"Age": 42,
"Address": {
"Street": "SomeStreet",
"City" : "Some City"
}
}
}
我的实际数据如下:
{
"Person":{
"FirstName":"John",
"Age": 42
}
}
我无法弄清楚如何使地址可选:
type personJson = JsonProvider<"Data/personSample.json">
let personData = testJson.Load("Data/personData.json")
let address = personData.Person.Addres // gives an exception
还尝试将其转换为可选的失败 设p = personData.Person.Address |&gt; Option.ofObj
System.Exception:由于先前的错误,无法完成操作 类型'JsonProvider&lt; ...&gt; .Address'没有'null'作为2,35的正确值
我无法想象我应该为每个文件更改一些缺少数据的代码。
那么我该怎么做才能解决这个问题呢?
答案 0 :(得分:5)
您可以在设置类型提供程序时使用SampleIsList = true
,以便针对对象的形状提供多种变体。
open FSharp.Data
type personJson = JsonProvider<"Data/personsSample.json", SampleIsList = true>
let personData = personJson.Load("Data/personData.json")
personsSample.json
的内容可能如下所示,其中包括原始json和没有地址的json的变体:
[
{
"Person":{
"FirstName":"John",
"LastName":"Doe",
"Age": 42,
"Address": {
"Street": "SomeStreet",
"City" : "Some City"
}
}
},
{
"Person":{
"FirstName":"John",
"LastName":"Doe",
"Age": 42
}
}
]
现在,当您加载单个personData示例时,引用地址字段将正确处理空值而不是崩溃。