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 + "¤cyPair=" + 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."
谢谢你们俩
我正在尝试使用来自 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 + "¤cyPair=" + 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."
谢谢你们俩