0

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

 {
"employees":[{
"Srno":1,
"EmpID":123,
"Name":"John Doe"
 }, 
 {
 "Srno":2,
 "Name":"James Mars"}]
 }

这个想法是员工数组中的每个元素都具有三个属性,即。Srno、EmpID 和名称。

但是,第二个元素故意留下了 3 个属性中的 2 个,即仅 Srno 和 Name。

我的假设是它不会解析。但确实如此

然后这个来自JSON.org的关于数组的声明,不正确。

值的有序列表。在大多数语言中,这被实现为数组、向量、列表或序列。

我在理解 JSON 中的数组时在哪里弄错了?有人可以澄清一下。

4

2 回答 2

3

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

{
"example":[{
"id":1,
"a":123,
"b":"John Doe"
 }, 
 {
 "id":1,
 "a":"ABC",
 "c":"James Mars",
 "d": true
 }]
}

上面的代码片段是完全有效的 JSON。注意——除了你对数组的“担忧”之外:

  1. 无法指定 ID 必须是唯一的。

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

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

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

于 2013-09-30T09:18:52.117 回答
2

您的假设是编程语言应该给出某种类型的解析错误给定一个数组,其中值是不同类型的,就像在您的示例中一样。这种假设是非常错误的。

当然,如果您在谈论Java,C++或者C#例如,您是正确的,但是Perl, Python, PHP, Ruby, R, JavaScript, Smalltalk, ActionScript, Clojure, ColdFusion, Common Lisp(以及大多数其他 Lisps), Powershell, Dylan, Groovy, Gambas, Matlab,ioVBScript许多其他语言都可以接受数组与不同类型的对象。

JSON 就像那些语言一样。根本没有什么奇怪的事情发生。

PS。我建议学习一种动态类型语言(可能来自上面的列表),以便更广泛地了解编程。就像我建议所有动态语言倡导者学习静态语言一样!

于 2013-09-30T09:25:18.050 回答