JSON F# 的类型提供程序:正在获取 rows/column 个名称

JSON type provider for F#: getting rows/column names

我正在尝试使用来自 FSharp.Data 的 JSON 提供商 http://fsharp.github.io/FSharp.Data/library/JsonProvider.html

type BookOrder = JsonProvider<"../Documents/sample.json">

let commandType = "returnOrderBook" 
let currencyPair = "BTC_NXT"
let depth = string 3

let polReq = "https://poloniex.com/public?" + "command=" + commandType + "&currencyPair=" + currencyPair + "&depth="
+ depth

let BookOrderNow = BookOrder.Load(polReq)

 val BookOrderNow : JsonProvider<...>.Root =   {   "asks": [   [   "0.00001605",   14636.67789781   ],   [   "0.00001606",   73739.31116785   ],   [   "0.00001607",   1342158.7102721   ]   ],   "bids": [   [   "0.00001593",   17805.17982312   ],   [   "0.00001591",   71659.725   ],   [   "0.00001590",   67600.19748428   ]   ],   "isFrozen": "0",   "seq": 29534867  }

BookOrderNow.Bids

val it : decimal [] [] =   [|[|0.00001593M; 17805.17982312M|]; [|0.00001591M; 71659.725M|];   [|0.00001590M; 67600.19748428M|]|]

有没有一种方法可以得到输出

["asks";"bids";"isFrozen";"seq"]

?

如果我确实从某个变量 function/method "bids" 中得到 varname 是否有类似(在这种特殊情况下)

的函数
GetJsonContent: JsonProvider<...>.Root -> string -> ???
GetJsonContent BookOrderNow varname

和 return BookOrderNow.Bids 的值 ?

我的意思是,如果我们提前知道 JSON 文件的内容,我们就不需要这样做,但如果我们不知道,...?最后我想把数据放在 Deedle Frame / Series objects

感谢您的任何建议。这是我第一次认真地尝试使用这个库

@FoggyFinder 给我的答案

BookOrderNow.JsonValue.Properties()
   |> Seq.map fst
   |> printfn "%A" //=> seq ["asks"; "bids"; "isFrozen"; "seq"]

let getJsonContent (x:BookOrder.Root) varname =
    x.JsonValue.GetProperty varname
    |> JsonExtensions.AsArray
    |> Array.map
        (JsonExtensions.AsArray >> Array.map (JsonExtensions.AsDecimal))

但是,根据@Matiasd 的评论,

"Type providers are best suited to situations where the schema is stable at runtime and during the lifetime of compiled code."

谢谢你们俩