如何在f#中将JObject转换为JArray

时间:2018-07-10 10:17:20

标签: f#

我想将此 tablesinJson 转换为 JArray 并循环遍历。

let tablesInJson = (JArray)jsonModel["tables"];

类似于C#的东西

 let json = "{
    "table": [{
        "boolean": true,
        "null": null,
        "number": 123,
        "string": "Hello World"
    }]
}"

    let ConvertFoo (jsonModel : JObject) (TableInfo : TableInfo list) =
        let tablesinJson = jsonModel.["tables"]

        //convert tablesinJson into JArray and loop through it
        //let tablesInJson = (JArray)jsonModel["tables"]; something like this

        printfn "%O" jsonModel.["tables"]
        printfn "%O" sqlTableInfos


    let _json= JObject.Parse(json)
    let list = [TableName "one" ; ColumnName "table"]
    ConvertFoo _json list

1 个答案:

答案 0 :(得分:3)

一个遍历table字段中所有对象并打印string字段的最小示例是:

open Newtonsoft.Json.Linq

let parsed = JObject.Parse(json)
let tables = parsed.["table"] :?> JArray
for table in tables do 
  let value = table.["string"] :?> JValue
  printfn "%O" value

如评论中所述,您需要使用:?>运算符将对象转换为JArray(以便可以使用for对其进行迭代)或{{1 }}(以便您可以访问该值)。

可能值得注意的是,您可以使用F#Data中的Json type provider做同样的事情,并且可以避免所有的转换,因为类型提供程序会推断类型并将所有嵌套数据公开为成员:

JValue