【问题标题】:F# Where is JsonValue AsArray?F# JsonValue AsArray 在哪里?
【发布时间】:2017-04-03 14:00:15
【问题描述】:

我有:

open FSharp.Data
open FSharp.Data.JsonExtensions

[<EntryPoint>]
let testjson argv =

    let json = """
    {
        "KeyValuePairs": "[{\"Key\" : \"one\", \"Value\" : \"1\"},{\"Key\" : \"two\", \"Value\" : \"2\"}]"
    }
    """

    let info = JsonValue.Parse(json)
    let infoarray = info.AsArray()

但我在最后一行遇到错误:

错误 52 未定义字段、构造函数或成员“AsArray”

即使我在这里遵循示例:

F# Data: JSON Parser

在“使用 JSON 扩展”部分。所以,很明显我错了。但是在哪里?

【问题讨论】:

    标签: arrays json f#


    【解决方案1】:

    您试图将 JsonValue 本身视为一个数组 - 它不是,它是一个对象。看来您可能希望将 KeyValuePairs 属性视为一个数组。所以试试这个:

    let keyValuePairs = info?KeyValuePairs.AsArray()
    

    【讨论】:

    • 嗯好吧,我明白了,我想。如果我事先不知道 JSON 中的条目名称怎么办?例如我不知道是否有 叫KeyValuePairs。我只想看看 JSON 中有什么。例如打印出来进行调试。
    • 好的,所以你不知道它是否确实包含一个数组?我对你到底在追求什么感到困惑。您是否从给定的 JSON 字符串开始?在这种情况下,只需将其打印出来进行调试?您可能需要重新表述您的问题。
    • 是的,我有一个用于学习的玩具示例。当我了解这一切如何协同工作时,我将从外部来源获得格式良好的 JSON,但它会因运行而异。它可能有一堆名称和值,然后是一个包含其他键/值对列表的嵌入式列表(因此是我的玩具示例),但我无法提前知道项目的名称(虽然我 will 知道嵌入的键/值对列表的名称)。我想将名称/值对保存在字典或其他东西中以备后用。
    • 顺便说一句,让 keyValuePairs = info?KeyValuePairs.AsArray() 显示相同的“不防御”错误
    • @user1443098 这可能是因为KeyValuePairs 在您的示例中实际上是一个字符串。
    【解决方案2】:

    这是一个老问题,但我会为有需要的人留下答复。

    错误是当 KeyValuePairs 被视为一个数组而不是一个字符串时

    let json = """ {"KeyValuePairs": "[{\"Key\" : \"one\", \"Value\" : \"1\"},{\"Key\" : \"two\", \"Value\" : \"2\"}]"} """
    
    let info = JsonValue.Parse(json)
    
    let infoarray = info?KeyValuePairs.AsString()
    
    let newinfo = JsonValue.Parse infoarray
    
    printfn "%A" (newinfo.[0]?Key.AsString()) // prints "one"
    

    希望这对您有所帮助!

    干杯

    【讨论】:

      猜你喜欢
      • 2017-08-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多