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

亚历克斯·克鲁尼(Alex Klunniy)

是否可以使用复杂路径从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)
马克·西曼(Mark Seemann)

您可以使用JSON.net轻松地做到这一点

open Newtonsoft.Json.Linq

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

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

如何使F#JSON类型提供程序示例可用于测试项目?

F#JSON类型提供程序错误:此令牌保留供将来使用

Spring Boot:如何解析由对象数组组成的JSON,并使用路径变量获取特定值?

使用动态属性名称解析 JSON

从JSON获取属性名称

如何使用属性名称中的多个单词来解析/解析JSON对象-JavaScript

如何在C#中使用反射获取Json属性名称

如何使用Jackson获取基于json属性名称的阅读器方法?

如何从JSON列获取所有不同的属性名称?

如何使用Powershell从json属性获取键值对

如何使用javascript获取json对象属性

使用NodeJS从package.json获取名称属性

如何使用 Oracle 解析没有元素/属性名称的 JSON 数组

由名称中带有句点的节点组成的JSON路径JSON提取器

F#JSON类型提供程序,请勿序列化空值

如何在PowerShell中访问名称由星号组成的属性?

如何使用NiFi解析/提取属性名称及其值

解析不带属性名称的JSON数据

如何使用几个属性和一个选项列表解析XML

如何使用xmllint / xpath解析不同元素上几个属性的值?

从C#中的动态JSON获取属性名称,然后在foreach循环中使用这些属性

如何使用动态属性名称为JSON对象

如何在表格中使用JSON属性名称?

如何在JSON .NET上对属性名称强制使用引号

如何从json获取python中属性的属性?

Pyspark - 从 json 文件中获取属性名称

F#数据:JSON解析器。使用JsonExtensions

如何使用gson或jackson解析复杂的json

如何使用Go unmarshal解析复杂的JSON?