正如约翰·帕尔默指出的那样,JsonSchema.Parse
解析 JSONschema,但从你的问题来看,你似乎想解析一个普通的 JSONvalue。这是可能的JsonConvert.DeserializeObject
:
let t = JsonConvert.DeserializeObject json
然而,签名DeserializeObject
是要返回obj
,因此这并不能特别帮助您访问这些值。为此,您必须将返回值转换为JObject
:
let t = (JsonConvert.DeserializeObject json) :?> Newtonsoft.Json.Linq.JObject
let name = t.Value<string> "Name"
Json.NET 旨在利用 C# 的优势dynamic
关键字,但 F# 中并未内置与之完全相同的关键字。但是,您可以通过以下方式获得类似的语法FSharp.Dynamic https://github.com/ekonbenefits/FSharp.Dynamic#fsharpdynamic--:
open EkonBenefits.FSharp.Dynamic
let t = JsonConvert.DeserializeObject json
let name = t?Name
注意?
before Name
。请记住,JSON 区分大小写。
Now, name
still 不是字符串,而是一个JValue
对象,但您可以通过调用获取字符串值ToString()
就可以了,但你也可以使用JValue
's Value
属性,如果值是数字而不是字符串,这会很方便:
let jsonWithNumber = """{ "number" : 42 }"""
let t = JsonConvert.DeserializeObject jsonWithNumber
let actual = t?number?Value
Assert.Equal(42L, actual)