Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/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
json中的数组结构是否冗余?_Json_Xml_Xsd_Semantics_S Expression - Fatal编程技术网

json中的数组结构是否冗余?

json中的数组结构是否冗余?,json,xml,xsd,semantics,s-expression,Json,Xml,Xsd,Semantics,S Expression,年,它说: JSON构建在两种结构上: 名称/值对的集合。在各种语言中,这是作为对象、记录、结构、字典、哈希表、键控列表或关联数组实现的 值的有序列表。在大多数语言中,这是以数组、向量、列表或序列的形式实现的 我的问题是: 为什么json设计为使用两种类型的数据结构而不是一种?(仅限名称/值对) 比如说, 我使用以下两种方法来描述学校结构(学校包含多个学生): 一, 二, 哪个更好 我喜欢第二个 为什么? 因为在我看来,成员“Student”是数组或映射,有序或无序,有界或无界,应该在其元数据中

年,它说:

JSON构建在两种结构上:

名称/值对的集合。在各种语言中,这是作为对象、记录、结构、字典、哈希表、键控列表或关联数组实现的

值的有序列表。在大多数语言中,这是以数组、向量、列表或序列的形式实现的

我的问题是:

为什么json设计为使用两种类型的数据结构而不是一种?(仅限名称/值对)

比如说,

我使用以下两种方法来描述学校结构(学校包含多个学生):

一,

二,

哪个更好

我喜欢第二个

为什么?

因为在我看来,成员“Student”是数组或映射,有序或无序,有界或无界,应该在其元数据中定义,而不是在实例数据中定义

上面的两个学校json数据都是实例数据!(注意:符号“[]”表示“类型信息”,应该在元数据中定义。它现在是多余的…)

在上面的示例中,当我使用类似XPath的语法访问“Name”成员时,它们没有什么不同:

  • School.Student[0]。名字为什么多余

    讨论数据传输的理论?是的,它是冗余的,因为它支持的其他结构可以表示数组

    平衡稀疏性、代表性完整性、人类读者和作者的简单性、软件解析器和生成器的简单性、解析和生成的速度、映射到数据结构的简单性和验证的简单性——也就是说,实际的设计目标——那么不是。能够直接对数组进行编码有利于稀疏性、人类的简单性和验证的简单性(如果它是语法上的有效数组,那么它就是有效数组,这不一定遵循映射,它可以省略索引,而不需要单独的应用程序特定规则来处理)生产的速度(如果某些东西映射到不断增长的指数上,那么我们可能会被迫发现有人把它们混在一起)。从分析所能表达的意义上讲,什么是冗余,从没有提供实际利益的意义上讲,什么是冗余


    在第二种情况下,“超出我们需要或想要的”冗余具有相当贬义的含义,而在其他情况下冗余可能是一件积极的事情(冗余给你处理损失的空间,在不同情况下捕捉错误的能力等等)。这里的冗余属于第二类;我们可以使用一个没有数组的JSON版本,所以我们并不严格需要它,但生活要简单得多,因为我们有它,几乎没有人会去努力生成一个可怕的升序整数到元素的映射,只是为了让那些解析它的人的生活更加困难。

    在您的XML示例中,我看到的是一个列表,而不是一个映射,在您的XPath标准数组索引中,我看不出它如何支持您的观点。另外,您的问题可能会在@Aaron上得到更好的回答是的,在XML示例中,Student是一个列表。这就是我想表达的。你可以把所有的东西都存储在一个字符串中,然后使用它。不用深入,你就可以在一堆可能是同一类型但彼此没有直接关系的对象和一组具有相同基本类型且在一个上下文中属于一起的对象之间做出区别,另外,数组强制执行顺序,对象不强制执行顺序,数组是基本的数据结构,几乎存在于每种语言中,无论是否有其他更高级别的集合可用。您的答案对我来说非常有价值。是的,“超越我们需要或想要的”是我想说的。谢谢!你提到了简约、代表性的完整性、对人类读者和作家的简单性等等。但“一致性”或“优雅”呢?如果我们可以使用嵌套映射(仅在文本中而不是在实现中)来描述数组,为什么要引入数组?(例如:s-expression)另一个原因是在开发大型项目时,我们通常会引入一些元数据文件。(例如:XML模式/JSON模式)在本例中,“[]”的语义实际上是冗余的。(例如:XML没有数组,我们可以在xsd中定义多值语义)再次感谢!这种理论上的一致性在实践中给我们带来了什么?(好的,解析库可能更简单,尽管历史上最早解析它的方法之一是原始的
    eval
    ,虽然不安全,但它确实起作用,并且从这个起点开始,从结果生成数组就不那么简单,而不是更多)为什么我们要在使用它的用例中重视它?因为我想知道json设计背后的思想。例如,为什么json有数组而xml没有?为什么我们通常使用xml模式,但通常不使用json模式?我们应该只在javascript项目中使用json,在其他情况下使用xml吗?(json可以减少javascript中的阻抗不匹配,但并非所有语言都如此)为什么近年来大多数人都主张使用json作为通用数据传输格式而不是xml?
    {
        "Student" : [
            { "Name" : "Peter", "Sex" : "Male" },
            { "Name" : "Linda", "Sex" : "Female" },
        ]
    }
    
    {
        "Student" : {
            "0" : { "Name" : "Peter", "Sex" : "Male" },
            "1" : { "Name" : "Linda", "Sex" : "Female" },
        }
    }
    
    <School>
        <Student Name="Peter" Sex="Male"/>
        <Student Name="Linda" Sex="Female"/>
    </School>