不同类型的JSON

时间:2013-09-09 05:39:52

标签: json web-services validation data-structures specifications

我正在看这个问题

What is JSON and why would I use it?

我对给予JSON结构的不同名称感到困惑

  • 什么是简单的JSON?
  • JSON数组?
  • JSON数组的数组?
  • 其他可能的任何

示例1:这是什么叫

{
    "MIT_COLLEGE": [
                    {
                      "_id": 1,
                      "StudentName": "Sam",
                      "Student_Age": "24",
                      "Student_phone": "8725436232",
                      "Student_sex": "Male",
                    },
                    {
                      "_id": 2,
                      "StudentName": "kira",
                      "Student_Age": "22",
                      "Student_phone": "8725136232",
                      "Student_sex": "Female",
                    }
                   ],
    "CAMBRIDGE_COLLEGE": [
                          {
                           "_id": 1,
                           "StudentName": "Paul",
                           "Student_Age": "26",
                           "Student_phone": "87333336232",
                           "Student_sex": "Male",
                          },
                          {
                           "_id": 2,
                           "StudentName": "michael",
                           "Student_Age": "22",
                           "Student_phone": "872115436232",
                           "Student_sex": "Male",
                          }
                    ]
}

示例2 :: 这是什么叫

                             {
                               "_id": 2,
                               "StudentName": "michael",
                               "Student_Age": "22",
                               "Student_phone": "872115436232",
                               "Student_sex": "Male",
                              }

JSON中的其他可能结构及其名称是什么?

谢谢...希望我很清楚

3 个答案:

答案 0 :(得分:2)

唯一的区别在于规格:

以下是不同之处:

  • 在六个中的任何一个之前或之后允许不重要的空格 结构特征。(RFC 4627)

  • 任何令牌之前或之后都允许使用无效的空格。(ECMA-404)

  • JSON文本应以Unicode编码。默认编码为UTF-8。 (RFC 4627)

  • JSON文本是由Unicode代码点形成的符号序列,符合JSON值语法。 (ECMA-404)

  • 实现绝不能在JSON文本的开头添加字节顺序标记。 (RFC7159)

  • I-JSON消息中的对象不得包含具有重复名称的成员。 (RFC7493)

  • 每一行都是有效的JSON \n行分隔符(ndJSON)

他们背后的理由:

RFC4627

  

ECMA标准是最小的,只描述了允许的语法语法,而RFC也提供了一些语义和安全性考虑。

RFC7159

  

IETF对JSON规范,特别是RFC4627抱怨不已。首先,它是“信息”而不是“标准轨道”,这意味着在某些情况下存在官僚主义问题。其次,它与ECMA版本不一致,因为4627要求JSON文本要么是对象要么是列表,而ECMA版本只有“42”或者是真的。最后,4627允许一些东西,比如对象中的重复键和破坏的Unicode字符串,每个人都同意这是不好的做法。

     

因此,IETF在2013年成立了一个JSON工作组,目的是修改4627以解决这些问题。

RFC7493

  

I-JSON只是一个说明,如果你构造一大块JSON并避免RFC 7159中描述的互操作失败,你可以称之为“I-JSON消息”。如果任何已知的JSON实现创建了I-JSON消息并将其发送到任何其他已知的JSON实现,那么软件意外的可能性就会非常小。

     

JSON开始在安全相关协议中大量使用:加密,身份验证/授权等。事实证明,安全人员担心糟糕的人和政府雇员使用愚蠢的JSON技巧,如重复密钥和严重错误的Unicode来攻击这些协议。

     

因此,如果您指定您的有效负载必须是I-JSON消息,并且接收方检查该消息,则您不再需要担心一类特定的攻击。<​​/ p>

ndJSON

  

ndJSON的一个常见用例是通过TCP或UNIX管道等流协议提供多个JSON文本实例。它还可以用于存储半结构化数据。

eJSON

  

eJSON是JSON的扩展,支持更多类型。它支持所有JSON安全类型,以及:

     

日期(JavaScript日期)   二进制(JavaScript Uint8Array或EJSON.newBinary的结果)   用户定义的类型

     

所有eJSON序列化也是有效的JSON。例如,具有日期和二进制缓冲区的对象将在EJSON中序列化为:

    {
     "d": { "$date": 1358205756553 },
     "b": { "$binary": "c3VyZS4=" }
    }

<强>参考

答案 1 :(得分:0)

JSON是JSON。

Douglas Crockford最好说:

  

http://www.json.org/fatfree.html

     

JSON(或JavaScript Object Notation)是一种编程语言模型   数据交换格式。它是最小的,文本的和子集   JavaScript的。具体来说,它是ECMA-262的一个子集(ECMAScript   编程语言标准,第三版,1999年12月)。它是   轻巧且易于解析。

     

JSON不是文档格式。它不是标记语言。它不是   甚至是一般的序列化格式,因为它没有直接的   循环结构的表示,虽然它可以支持元   做的表示。 ...

     

在我没有其他努力的情况下,JSON已被广泛采用   发现它使分布式生产变得容易得多的人   应用程序和服务。原始页面已被翻译成   中文,法文,德文,意大利文,日文,韩文和西班牙文。 JSON   已在RFC 4627中正式化.MIME媒体类型是   应用/ JSON。

     

JSON中表示的类型是字符串,数字,布尔值,对象,   数组,并且为null。

它实际上不再是Javascript编程语言中的一些特定结构。这些结构(如上所述)以下内容:

  • 字符串
  • 布尔
  • 物体
  • 阵列

上面引用的两个例子都只是“JSON”。

您可以在此处找到更多信息:

答案 2 :(得分:0)

还应注意另一件事:JSON的所有这些定义都允许使用名称/值对形式的名称(在Javascript中不是有效的属性名称),例如字段名称不能以Javascript对象中的数字或符号开头,并且不能包含空格,但是JSON名称/值对中的名称可以包含任何字符(可能会转义)。因此,JSON的名称有点令人误解-它更像是一个关联数组,而不是Javascript对象的表示形式。