将键值对存储在对象的JSON数组中

时间:2017-10-24 23:49:25

标签: arrays json

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

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

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

4 个答案:

答案 0 :(得分:1)

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

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

答案 1 :(得分:0)

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

这样,它仍然是有效的JSON,其他实现也可以读取元字段而不用太多。

编辑:刚才意识到,你还必须使Data成为对象而不是数组。然后你的JSON模式应该成为这个:

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

这可能是最稳定,可维护和便携的解决方案。 对于参考,something similar之前已经被问过。

答案 2 :(得分:0)

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

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

这种方法确实带来了data JSON数组必须的索引0包含一个包含metadata的JSON对象以及通用解析器的相关指令的限制。如果未将此元数据对象包含为索引0,则会触发通用解析器需要处理的错误情况。所以它确实有它的权衡。

答案 3 :(得分:-1)

我会去尝试帮助你..

&#34;元数据&#34; :[     {         &#34; foo&#34;:1,         &#34; bar&#34;:&#34; barString&#34;     },      {         &#34; foo&#34;:3,          &#34; bar&#34;:&#34; fooString&#34;      }     ]