F# JSON Typeprovider 因丢失数据而崩溃
sharpest
阅读:49
2025-02-15 21:57:57
评论:0
如何处理 JSON 文件中缺失的数据?对于数据列表,您可以简单地使用 map 功能。但是对象呢
假设我有样本数据:
{
"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 示例时,引用地址字段将正确处理空值而不是崩溃。
声明
1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。