F# : getting rows/column names 的 JSON 类型提供程序

标签 json f# type-providers f#-data deedle

我正在尝试使用 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"]

如果我确实从某个变量 varname 中的某个函数/方法“出价”中得到了结果,是否存在类似的函数(在本例中)

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

并返回 BookOrderNow.Bids 的值?

我的意思是,如果我们提前知道 JSON 文件的内容,我们就不需要这样做,但如果我们不知道,...?最终我想将数据放入 Deedle Frame/Series 对象中

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

最佳答案

@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 的评论,

“类型提供程序最适合架构在运行时和编译代码的生命周期内保持稳定的情况。”

谢谢你们两位

关于F# : getting rows/column names 的 JSON 类型提供程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43485562/

相关文章:

f# - F# 中的类型推断和新功能

android - 对象数组的 jackson 反序列化

f# - 关于懒惰定义的问题

ruby-on-rails - Rails 6,服务中的独立 Jbuilder : partials not loading

oop - F# 对象构造函数

F#类型提供程序和数据处理

f# SqlDataProvider .Net Core 2.0 - 不支持在环境中登记

f# - 尝试在 f# 中验证 CSV 数据

javascript - 如何在 json 对象中读取阿拉伯语

json - swift2中如何从json中读取数据