解析JSON文件的一部分并查看数据

时间:2016-06-29 23:13:11

标签: json f# f#-interactive f#-data

我发现了这个F# JSON parsing - How to get property using complex path (consisting of several propery names)(我缩短了文件字符串)。我想知道如何在FSI窗口中显示json文件中的实际数据?

let soilTest = JsonValue.Load("c:\\,,,soiltest.json")
let query soilTest=
    let node = JObject.Parse soilTest
    node.SelectToken "person[0].name" |> string

以下是json文件的开头:

 {
      "person": [
        {
          "name": "John Doe",
          "date": "December 1, 2015",
    .....

我查看了Mark Seemann提供的链接,以了解如何从json文件中获取数据并显示在控制台中。
但是当放

Console.WriteLine(name)

我收到了这个警告:

 warning FS0020: This expression should have type 'unit', but has type 'string'. Use 'ignore' to discard the result of the expression, or 'let' to bind the result to a name.

val query : soilTest:string -> unit

尝试|>在console.writeline的末尾忽略,我得到val查询:soulTest:string - >单元

如何从这一点开始使用let语句将数据绑定到它?

1 个答案:

答案 0 :(得分:4)

soilTest属于JsonValue类型,但您尝试将其解析为string,因此出现错误。请调整您的环境路径,否则这对我有用:

let soilTest = JsonValue.Load(@"c:\tmp\test.json")
let qry (soilTest:JsonValue) = 
    let data = JObject.Parse (soilTest.ToString()) 
    data.SelectToken "person[0].name" |> string

qry soilTest
//val it : string = "John Doe"

可能有更好的方法可以使用。 Json和xml是我存在的祸根......
修改,例如您可以直接访问属性,如下所示:

let soilTest = JsonValue.Load(@"c:\tmp\test.json")  
soilTest.["person"].[0].["name"].AsString()
//val it : string = "John Doe"