gpt4 book ai didi

json - 有没有办法使用 F# JsonProvider 枚举 JSON 属性?

转载 作者:行者123 更新时间:2023-12-02 02:16:52 26 4
gpt4 key购买 nike

我使用 F# 和 JSON 类型提供程序解析一些 JSON 格式的数据。

示例.json:

{
"contracts": {
"11": {
"id": 11,
"date": "08.01.2021"
},
"12": {
"id": 12,
"date": "09.01.2021"
},
"13": {
"id": 13,
"date": "11.01.2021"
}
}
}

我的 F# 代码:

namespace Analyse
open Microsoft.FSharp.Reflection

module AnalyserExample =
open System
open FSharp.Data

let [<Literal>] SampleFile = @"example.json"
type ContractsProvider = JsonProvider<SampleFile>

let contracts () =
let data = ContractsProvider.Parse("example.json")
let contracts = data.Contracts
contracts.``11``
contracts.``12``
contracts.``13``

JsonProvider 按预期工作,每个合约都被解析为一个字段,但我想枚举它们。我有一些选择。在类型提供程序初始化运行之前,使用反射来获取字段列表或使用一些自定义转换来转换 JSON,但我都不喜欢它们。

有没有办法使用 JsonProvider 或某些 F# 魔法将此结构转换为序列?

最佳答案

您可以通过底层 JsonValue 来执行此操作,这是 JsonProvider 的构建基础:

let data = ContractsProvider.Parse(sample)
let contracts = data.Contracts
for _, value in contracts.JsonValue.Properties() do
printfn "%A" value

不过,在这种情况下使用 JsonProvider 根本没有什么值(value)。您最好跳过它,并动态运行解析器:

let data = JsonValue.Load("example.json")
for _, value in data.["contracts"].Properties() do
printfn "%A" value

这样,您就不需要依赖 JSON 来始终精确地包含合约 111213

关于json - 有没有办法使用 F# JsonProvider 枚举 JSON 属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67032461/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com