【问题标题】:Store key-value pair in JSON array of Objects将键值对存储在 JSON 对象数组中
【发布时间】:2018-04-05 21:53:20
【问题描述】:

我有兴趣将元数据的键值对存储在包含多个 JSON 对象的 JSON 数组中。这将指示通用解析器在处理 JSON 数组时如何处理 JSON 数组中的 JSON 对象列表。下面是一个示例 JSON,我希望在其中包含某种元数据字段。

{
  "Data": [
    << "metadata":"instructions" here >>
    {
      "foo": 1,
      "bar": "barString"
    },
    {
      "foo": 3,
      "bar": "fooString"
    }
  ]
}

构造这个混合数据 JSON 数组的正确方法是什么?

【问题讨论】:

    标签: arrays json


    【解决方案1】:

    我会添加一个meta 键作为数据的对等点,如下所示。这会将您的数据与元数据分开。

    {
        "Meta": {
            "metadata":"instructions"
        },
        "Data": [
            {
                "foo": 1,
                "bar": "barString"
            },
            {
                "foo": 3,
                "bar": "fooString"
            }
        ]
    }
    

    【讨论】:

    • 这是一种有效的方法。它需要创建第二个字段来存储data JSON 数组之外的元数据指令。它具有将data JSON 数组保持在未修改状态的好处,但第二个字段可能是不利的,具体取决于完整 JSON 数据的结构(我在这个问题中使用的 JSON 是更大 JSON 数据集的简化)。看看我作为替代方案做出的答案,它也有局限性。
    【解决方案2】:

    如果您可以修改数据的结构,为什么不在您的说明中添加一个属性meta(即Data.meta)和另一个属性content(因为需要更好的词......)(即@ 987654325@),其中后者是原始的对象数组。

    这样,它仍然是有效的 JSON,其他实现也可以轻松读取元字段。

    编辑:刚刚意识到,您还必须使 Data 成为对象而不是数组。那么你的 JSON 模式应该变成这样:

    {
      "Data": {
        "metadata": "instructions here",
        "content": [
          {
            "foo": 1,
            "bar": "barString"
          },
          {
            "foo": 3,
            "bar": "fooString"
          }
        ]
      }
    }
    

    这可能是最稳定、可维护和便携的解决方案。 供参考,something similar 之前已经有人问过了。

    【讨论】:

      【解决方案3】:

      在与另一位开发人员进行了一些额外的讨论后,我们想到了一种将元数据指令包含在 data JSON 数组中的方法。

      {
        "Data": [
          {
            "metadata": "Instructions"
          }
          {
            "foo": 1,
            "bar": "barString"
          },
          {
            "foo": 3,
            "bar": "fooString"
          }
        ]
      }
      

      这种方法确实存在以下限制:data JSON 数组的索引 0必须包含一个 JSON 对象,该对象包含 metadata 和通用解析器的相关指令。未能将此元数据对象包含为索引 0 将触发通用解析器需要处理的错误情况。所以它确实有它的取舍。

      【讨论】:

      • 为什么不让Data 成为一个对象而不是一个数组,并为元数据和您的实际数据项设置键,正如我自己和类似的 jfadich 所建议的那样?这不是一个可行的方法吗?它将删除您提到的 0-index 约束。
      【解决方案4】:

      我会去帮你的..

      “元数据”:[ { “富”:1, “酒吧”:“酒吧字符串” }, { “富”:3, “酒吧”:“fooString” } ]

      【讨论】:

      • 对不起,因为我的代码只有一行..希望我能帮助解决你的问题:)
      • 不是我的目标。这实质上是将字段data 重命名为metadata。我希望将metadata inside 包含在data JSON 数组中。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-04-24
      • 2014-06-26
      • 1970-01-01
      • 2016-03-18
      • 2011-11-11
      • 2013-07-04
      相关资源
      最近更新 更多