Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/fsharp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/visual-studio-2010/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
F#-JSON类型提供程序-文本字符串_F#_Type Providers - Fatal编程技术网

F#-JSON类型提供程序-文本字符串

F#-JSON类型提供程序-文本字符串,f#,type-providers,F#,Type Providers,我在使用F#Type提供程序时遇到了一个有趣的问题。使用以下示例json生成所需类型效果很好,但有一个突出的问题-其中一个值是文字字符串(“235”),但该字符串不会出现在实际数据中-每个新记录都有一个不同的三位数: { "record": { "235": { "Id": "001", "Name": "A. N. Other", "IdDatetime": "2017-11-11T13:10:00+00:00" ...

我在使用F#Type提供程序时遇到了一个有趣的问题。使用以下示例json生成所需类型效果很好,但有一个突出的问题-其中一个值是文字字符串(“235”),但该字符串不会出现在实际数据中-每个新记录都有一个不同的三位数:

{
"record": {
    "235": {
        "Id": "001",
        "Name": "A. N. Other",
        "IdDatetime": "2017-11-11T13:10:00+00:00"
        ...
    }
    "255": {
        "Id": "005",
        "Name": "D. Other",
        "IdDatetime": "2017-11-11T13:10:00+00:00"
        ...
    }
}
因此,不幸的是,我无法在事先不知道三位数代码的情况下访问Id、Name和IdDateTime字段


有什么建议吗?

您必须使用JsonProvider吗?FSharp.Data中有一个更简单的方法,可以更轻松地访问更动态的数据。在那之后,只需进行简单的练习,即可将其分解为内部部分

#r @"../packages/FSharp.Data/lib/net40/FSharp.Data.dll"

open FSharp.Data
open FSharp.Data.JsonExtensions

[<Literal>]
let jsonText = """
{
"record": {
    "235": {
        "Id": "001",
        "Name": "A. N. Other",
        "IdDatetime": "2017-11-11T13:10:00+00:00"
        }
    }
}
"""

let json1 = JsonValue.Parse(jsonText)
let json2 = json1?record

let json3 = 
    match json2 with
        | JsonValue.Record x -> x

let json4 = 
    match json3 with
    [|(_,x)|] -> x
val json4:JsonValue[]=[|{“Id”:“001”,“Name”:“A.N。 其他,“IdDatetime”:“2017-11-11T13:10:00+00:00”}; {“Id”:“005”,“名称”:“D.其他”,“IdDatetime”:“2017-11-11T13:10:00+00:00”}


match json4
在存在多个JsonValue(例如,“235”和“255”)时失败?这只是一个示例。您可以使用它在结构中循环。但让我稍后调整答案。
let jsonText2 = """
{
"record": {
    "235": {
        "Id": "001",
        "Name": "A. N. Other",
        "IdDatetime": "2017-11-11T13:10:00+00:00"
    },
    "255": {
        "Id": "005",
        "Name": "D. Other",
        "IdDatetime": "2017-11-11T13:10:00+00:00"
    }
  }
}
"""

let json1 = JsonValue.Parse(jsonText2)
let json2 = json1?record

let json3 = 
    match json2 with
        | JsonValue.Record x -> x


let json4 = 
json3 
|> Array.map (function _,x -> x)