json中的数组结构是否冗余?
年,它说: JSON构建在两种结构上: 名称/值对的集合。在各种语言中,这是作为对象、记录、结构、字典、哈希表、键控列表或关联数组实现的 值的有序列表。在大多数语言中,这是以数组、向量、列表或序列的形式实现的 我的问题是: 为什么json设计为使用两种类型的数据结构而不是一种?(仅限名称/值对) 比如说, 我使用以下两种方法来描述学校结构(学校包含多个学生): 一, 二, 哪个更好 我喜欢第二个 为什么? 因为在我看来,成员“Student”是数组或映射,有序或无序,有界或无界,应该在其元数据中定义,而不是在实例数据中定义 上面的两个学校json数据都是实例数据!(注意:符号“[]”表示“类型信息”,应该在元数据中定义。它现在是多余的…) 在上面的示例中,当我使用类似XPath的语法访问“Name”成员时,它们没有什么不同:json中的数组结构是否冗余?,json,xml,xsd,semantics,s-expression,Json,Xml,Xsd,Semantics,S Expression,年,它说: JSON构建在两种结构上: 名称/值对的集合。在各种语言中,这是作为对象、记录、结构、字典、哈希表、键控列表或关联数组实现的 值的有序列表。在大多数语言中,这是以数组、向量、列表或序列的形式实现的 我的问题是: 为什么json设计为使用两种类型的数据结构而不是一种?(仅限名称/值对) 比如说, 我使用以下两种方法来描述学校结构(学校包含多个学生): 一, 二, 哪个更好 我喜欢第二个 为什么? 因为在我看来,成员“Student”是数组或映射,有序或无序,有界或无界,应该在其元数据中
在第二种情况下,“超出我们需要或想要的”冗余具有相当贬义的含义,而在其他情况下冗余可能是一件积极的事情(冗余给你处理损失的空间,在不同情况下捕捉错误的能力等等)。这里的冗余属于第二类;我们可以使用一个没有数组的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>