为什么JSON中的数组不统一?

时间:2013-09-30 07:43:37

标签: arrays json

我认为数组作为数据结构是一组有组织的项目,根据定义,它是一组有序的键:值对。我试图用一个简单的例子来测试它。

 {
"employees":[{
"Srno":1,
"EmpID":123,
"Name":"John Doe"
 }, 
 {
 "Srno":2,
 "Name":"James Mars"}]
 }

这个想法是employees数组中的每个元素都有三个属性即。 Srno,EmpID和姓名。

然而,第二个元素故意留下2个3个属性,即Srno和Name only。

我的假设是它不会解析。但确实

然后来自JSON.org的关于数组的声明不正确。

  

有序的值列表。在大多数语言中,这被实现为数组,向量,列表或序列。

我在哪里错误地理解JSON中的数组?有人可以澄清一下。

2 个答案:

答案 0 :(得分:3)

JSON定义了交换结构化数据的语法,但根本没有以语义的方式定义。

{
"example":[{
"id":1,
"a":123,
"b":"John Doe"
 }, 
 {
 "id":1,
 "a":"ABC",
 "c":"James Mars",
 "d": true
 }]
}

以上代码段是完全有效的JSON。注意 - 除了您的关注"关于数组:

  1. 无法指定该ID必须是唯一的。

  2. 无法指定具有相同名称的节点具有相同的数据类型。

  3. 总之,JSON不仅不要求每个节点都具有相同数量的属性,而且存在的属性不必具有相同的名称或相同的数据类型。

    相反,您可以完全复制示例的第一个节点(具有相同名称和值的3个属性),它同样有效。它纯粹是语法,没有语义。

答案 1 :(得分:2)

您的假设是编程语言应该给出某种类型的解析错误,给定一个数组,其中值的类型不同,如您的示例所示。这个假设非常错误。

当然,如果您正在谈论JavaC++C#,但PerlPython,{{ 1}},PHPRubyRJavaScriptSmalltalkActionScriptClojure,{{1} (和大多数其他Lisps),ColdFusionCommon LispPowershellDylanGroovyGambasMatlab和许多语言都会接受包含不同类型对象的数组。

JSON就像那些语言一样。没有什么奇怪的事情发生。

PS。我建议学习动态类型语言(可能是上面的列表中的一种),以便更全面地了解编程。就像我建议所有动态语言倡导者学习静态语言一样!