Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Arrays 为什么JSON中的数组不统一?_Arrays_Json - Fatal编程技术网

Arrays 为什么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 我的假设是它不

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

 {
"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。注意--除了您对阵列的“关注”之外:

  • 无法指定ID必须是唯一的

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

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


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

    JSON定义了结构化数据交换的语法,但根本没有定义太多的语义

    {
    "example":[{
    "id":1,
    "a":123,
    "b":"John Doe"
     }, 
     {
     "id":1,
     "a":"ABC",
     "c":"James Mars",
     "d": true
     }]
    }
    
    上面的代码片段是完全有效的JSON。注意--除了您对阵列的“关注”之外:

  • 无法指定ID必须是唯一的

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

  • 总之,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”一词)