JSON 根元素

28

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

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

我需要将JSON转换为XML,反之亦然。但是,尽管上面的JSON有效,但当我将其转换为XML时,它不是有效的?我是否漏掉了什么或者这是正常的情况?


1
你在使用哪个库进行转换?它显示了什么错误? - OCB
3个回答

39

JSON文档的最外层要么是一个“对象”(用花括号表示),要么是一个“数组”(用方括号表示)。

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

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


2
你有这方面的官方参考资料吗?我无法在任何地方验证。似乎任何格式正确的元素(数组、对象、字符串、数字等)都是技术上有效的 JSON 根元素,尽管前两个是唯一可以拥有子元素的。 - GrayWizardx
11
实际上,有两种不同的JSON规范。 RFC 4627要求JSON文本必须是一个对象或一个数组。而ECMA-262第5版第15.12节并没有强制这个限制。 - Michael Kay
4
看起来RFC 7159,第2节“JSON语法”已经取消了这个限制,并且现在允许任何值作为“根”。 - Garret Wilson
不幸的是,json.org上的规范首先导致了这个问题,因为它未能说明语法中哪些结构被允许作为顶级产生式。简短的规范很好(也请参见XPath 1.0),但通常会留下需要后来解决的歧义。 - Michael Kay

17
根据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

2

这很正常,JSON和XML的规则不同。您可以将根括号“{”和“}”转换为一个根元素,以确保没有转换问题。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接