我认为数组作为数据结构是一组有组织的项目,根据定义,它是一组有序的键:值对。我试图用一个简单的例子来测试它。
{
"employees":[{
"Srno":1,
"EmpID":123,
"Name":"John Doe"
},
{
"Srno":2,
"Name":"James Mars"}]
}
这个想法是employees数组中的每个元素都有三个属性即。 Srno,EmpID和姓名。
然而,第二个元素故意留下2个3个属性,即Srno和Name only。
我的假设是它不会解析。但确实。
然后来自JSON.org的关于数组的声明不正确。
有序的值列表。在大多数语言中,这被实现为数组,向量,列表或序列。
我在哪里错误地理解JSON中的数组?有人可以澄清一下。
答案 0 :(得分:3)
JSON定义了交换结构化数据的语法,但根本没有以语义的方式定义。
{
"example":[{
"id":1,
"a":123,
"b":"John Doe"
},
{
"id":1,
"a":"ABC",
"c":"James Mars",
"d": true
}]
}
以上代码段是完全有效的JSON。注意 - 除了您的关注"关于数组:
无法指定该ID必须是唯一的。
无法指定具有相同名称的节点具有相同的数据类型。
总之,JSON不仅不要求每个节点都具有相同数量的属性,而且存在的属性不必具有相同的名称或相同的数据类型。
相反,您可以完全复制示例的第一个节点(具有相同名称和值的3个属性),它同样有效。它纯粹是语法,没有语义。
答案 1 :(得分:2)
您的假设是编程语言应该给出某种类型的解析错误,给定一个数组,其中值的类型不同,如您的示例所示。这个假设非常错误。
当然,如果您正在谈论Java
,C++
或C#
,但Perl
,Python
,{{ 1}},PHP
,Ruby
,R
,JavaScript
,Smalltalk
,ActionScript
,Clojure
,{{1} (和大多数其他Lisps),ColdFusion
,Common Lisp
,Powershell
,Dylan
,Groovy
,Gambas
,Matlab
和许多语言都会接受包含不同类型对象的数组。
JSON就像那些语言一样。没有什么奇怪的事情发生。
PS。我建议学习动态类型语言(可能是上面的列表中的一种),以便更全面地了解编程。就像我建议所有动态语言倡导者学习静态语言一样!