F# JSON Typeprovider 在缺少数据时崩溃
F# JSON Typeprovider crashes on missing data
如何处理 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 |> Option.ofObj
System.Exception: 由于之前的错误,操作无法完成
类型 'JsonProvider<...>.Address' 在 2,35
处没有 'null' 作为正确的值
我无法想象我应该为每个缺少数据的文件更改代码。
那么我应该怎么做才能解决这个问题?
您可以在设置类型提供程序时使用 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 示例时,引用地址字段将正确处理空值而不是崩溃。
如何处理 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 |> Option.ofObj
System.Exception: 由于之前的错误,操作无法完成 类型 'JsonProvider<...>.Address' 在 2,35
处没有 'null' 作为正确的值我无法想象我应该为每个缺少数据的文件更改代码。
那么我应该怎么做才能解决这个问题?
您可以在设置类型提供程序时使用 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 示例时,引用地址字段将正确处理空值而不是崩溃。