gpt4 book ai didi

json - F# JSON 解析 - 如何使用复杂路径获取属性(由多个属性名称组成)

转载 作者:行者123 更新时间:2023-12-02 04:18:28 25 4
gpt4 key购买 nike

是否可以使用复杂路径从 JSON 获取属性,例如 "prop1.prop2"?我使用的 JSON 示例:

{
"prop1": {
"prop2": "value"
}
}

我想要的是获取属性“prop2”及其值“value”:当我尝试时:

#r "../packages/FSharp.Data.2.3.0/lib/net40/FSharp.Data.dll"
open FSharp.Data
open FSharp.Data.JsonExtensions

let json = JsonValue.Load "SampleJson.json"
json.GetProperty("prop1.prop2")

我得到了:

System.Exception: Didn't find property 'prop1.prop2' in {"prop1":{"prop2":"value"}}

我尝试自己写这样的方法,但看起来很笨拙:

let rec tryGetChildValue (propNameSplitted : List<string>) (json:JsonValue) = 
match propNameSplitted with
| [] -> None
| [x] -> json.TryGetProperty (x)
| x::xs ->
match json.TryGetProperty (x) with
| Some p -> tryGetChildValue xs (json.GetProperty(x))
| None -> None

let tryGetPropValue (propName: string) (json:JsonValue) =
let s = propName.Split '.' |> Array.toList
tryGetChildValue s json

let propName = "prop1.prop2"
let result = (tryGetPropValue propName json)

最佳答案

你可以这样做trivially with JSON.net :

open Newtonsoft.Json.Linq

let query json =
let j = JObject.Parse json
j.SelectToken "prop1.prop2" |> string

显然,这种方法没有类型安全性,但如果您希望能够使用任意字符串进行查询,这就是权衡。

关于json - F# JSON 解析 - 如何使用复杂路径获取属性(由多个属性名称组成),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37365041/

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