Arrays 为什么JSON中的数组不统一?
我相信作为数据结构的数组是一组有组织的项,根据JSON的定义,它是一组有序的键:值对。我试着用一个简单的例子来测试它Arrays 为什么JSON中的数组不统一?,arrays,json,Arrays,Json,我相信作为数据结构的数组是一组有组织的项,根据JSON的定义,它是一组有序的键:值对。我试着用一个简单的例子来测试它 { "employees":[{ "Srno":1, "EmpID":123, "Name":"John Doe" }, { "Srno":2, "Name":"James Mars"}] } 这个想法是让employees数组中的每个元素都有三个属性,即。Srno、EmpID和名称 但是,第二个元素故意保留了3个属性中的2个,即Srno和Name 我的假设是它不
{
"employees":[{
"Srno":1,
"EmpID":123,
"Name":"John Doe"
},
{
"Srno":2,
"Name":"James Mars"}]
}
这个想法是让employees数组中的每个元素都有三个属性,即。Srno、EmpID和名称
但是,第二个元素故意保留了3个属性中的2个,即Srno和Name
我的假设是它不会解析。但它确实做到了
那么这个关于数组的语句是不正确的
值的有序列表。在大多数语言中,这是以数组、向量、列表或序列的形式实现的
在理解JSON中的数组时,我哪里错了?有人能澄清一下吗。JSON定义了结构化数据交换的语法,但在语义方面没有太多定义
{
"example":[{
"id":1,
"a":123,
"b":"John Doe"
},
{
"id":1,
"a":"ABC",
"c":"James Mars",
"d": true
}]
}
上面的代码片段是完全有效的JSON。注意--除了您对阵列的“关注”之外:
相反,您可以完全复制示例的第一个节点(3个具有相同名称和值的属性),并且它同样有效。它是纯粹的语法,没有语义。JSON定义了结构化数据交换的语法,但根本没有定义太多的语义
{
"example":[{
"id":1,
"a":123,
"b":"John Doe"
},
{
"id":1,
"a":"ABC",
"c":"James Mars",
"d": true
}]
}
上面的代码片段是完全有效的JSON。注意--除了您对阵列的“关注”之外:
相反,您可以完全复制示例的第一个节点(3个具有相同名称和值的属性),并且它同样有效。这纯粹是语法,没有语义。您的假设是,如果数组中的值是不同类型的,那么编程语言应该给出某种解析错误,如您的示例中所示。这种假设是非常错误的 当然,如果你说的是
Java
,C++
或C
,你是对的,但是Perl
,Python
,PHP
,Ruby
,R
,JavaScript
,Smalltalk
,ActionScript
,Clojure
,,Common Lisp
(和大多数其他Lisp)、Powershell
、Dylan
、Groovy
、Gambas
、Matlab
、io
、VBScript
以及许多其他语言都会接受具有不同类型对象的数组
JSON就像那些语言一样。一点也不奇怪
另外,我建议学习一种动态类型语言(可能是上面列表中的一种),以便更广泛地理解编程。正如我建议所有动态语言倡导者学习静态语言一样 您的假设是,如果数组中的值是不同类型的,那么编程语言应该给出某种类型的解析错误,如您的示例中所示。这种假设是非常错误的
当然,如果你说的是Java
,C++
或C
,你是对的,但是Perl
,Python
,PHP
,Ruby
,R
,JavaScript
,Smalltalk
,ActionScript
,Clojure
,,Common Lisp
(和大多数其他Lisp)、Powershell
、Dylan
、Groovy
、Gambas
、Matlab
、io
、VBScript
以及许多其他语言都会接受具有不同类型对象的数组
JSON就像那些语言一样。一点也不奇怪
另外,我建议学习一种动态类型语言(可能是上面列表中的一种),以便更广泛地理解编程。正如我建议所有动态语言倡导者学习静态语言一样 为什么数组需要包含完全相同类型的对象?为什么不呢。这不是数组的基本定义吗?如果我可以与整数以外的任何其他语言对比的话,大小为10的数组表示10个整数。对吗?是的,但是JSON数组!=其他语言中的数组。注意,它表示“作为数组、向量、列表或序列”。在JSON.org上给出的定义是“一个有序的值列表”,这正是您的代码片段。它是一个有序的列表,并且包含值(注意任何地方都没有“type”一词)。(例如,检查Python列表)是的,但它不仅没有检查是否有3个属性,而且这3个属性不必具有相同的名称或相同的数据类型。相反,您可以完全复制第一个节点(3个具有相同名称和值的属性),并且它同样有效。这纯粹是语法,没有语义。为什么数组需要包含完全相同类型的对象?为什么不需要呢。这不是数组的基本定义吗?如果我可以与整数以外的任何其他语言对比的话,大小为10的数组表示10个整数。对吗?是的,但是JSON数组!=其他语言中的数组。注意,它表示“作为数组、向量、列表或序列”。在JSON.org上给出的定义是“一个有序的值列表”,这正是您的代码片段。它是一个有序列表,并且包含值(请注意,任何地方都没有“type”一词)