【问题标题】:JSON root elementJSON 根元素
【发布时间】:2012-05-03 07:26:00
【问题描述】:

JSON 是否像 XML 一样需要根元素。据我所知,这是一个有效的 JSON 字符串。

{
    "email":[
        {
            "type":"home",
            "name":"john.doe@gmail.com"
        },
        {
            "type":"work",
            "name":"jdoe@gmail.com"
        }
    ]
}

我需要将 JSON 转换为 XML,反之亦然。但是,尽管当我将其转换为 XML 时,上面的 JSON 是有效的,但它是无效的吗?是我遗漏了什么还是这很正常?

【问题讨论】:

  • 您使用什么库进行转换以及显示什么错误?

标签: xml json


【解决方案1】:

JSON 文档的最外层是“对象”(大括号)或“数组”(方括号)。

任何将 JSON 转换为 XML 的软件都必须调和这样一个事实,即它们是具有不同规则的不同数据模型。不同的转换工具以不同的方式处理这些差异。

更新 (2021-09-03): 如 cmets 所述,JSON 规范的后续迭代允许最外层是字符串、数字、布尔值或 null。

【讨论】:

  • 你有这方面的规范参考吗?我无法在任何地方验证这一点。似乎任何格式正确的元素(数组、对象、字符串、数字等)在技术上都是有效的 JSON 根元素,尽管前两个是唯一可以有子元素的元素。
  • 其实有两种不同的JSON规范。 RFC 4627 要求 JSON 文本是对象或数组。 ECMA-262,第 5 版,第 15.12 节没有施加此限制。
  • RFC 7159, section 2 "JSON Grammar" 似乎已经取消了这个限制,现在允许任何值作为“根”。
  • 不幸的是,json.org 的规范首先导致了这个问题,因为没有说明语法中的哪些结构被允许作为顶级生产。简短的规范很好(另请参阅 XPath 1.0),但通常会留下需要稍后解决的歧义。
【解决方案2】:

根据http://json.org/右侧窗格中修改后的Backus-Naur-Form,JSON数据结构的根元素可以是以下七种类型/值中的任何

Object
Array
String
Number
true
false
null

示例

所以以下所有示例都是有效的 JSON 根元素:

{
  "name": "Jpsy",
  "age": 99
}
[ 1, 2, "three", 4, 5 ]
"abcdefg"
123.45
true
false
null

【讨论】:

    【解决方案3】:

    这是正常的,json和xml没有相同的规则。您可以将根括号“{”和“}”转换为根元素,以确保没有转换问题

    【讨论】:

      猜你喜欢
      • 2016-10-03
      • 1970-01-01
      • 2017-11-21
      • 1970-01-01
      • 2015-03-29
      • 1970-01-01
      • 1970-01-01
      • 2018-03-22
      • 1970-01-01
      相关资源
      最近更新 更多