2

我在看这个问题

什么是 JSON,我为什么要使用它?

我对 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 中其他可能的结构,它叫什么?

谢谢...希望我很清楚

4

3 回答 3

2

唯一的区别在于规格之间:

以下是不同之处:

  • 在六个结构字符中的任何一个之前或之后都允许使用无关紧要的空格。(RFC 4627)

  • 在任何标记之前或之后都允许使用无关紧要的空格。(ECMA-404)

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

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

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

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

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

以及它们背后的原因:

RFC4627

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

RFC7159

IETF 对 JSON 规范,尤其是 RFC4627 存在相当大的不满。首先,它是“信息性”而不是“标准轨道”,这意味着在某些情况下会出现官僚主义问题。其次,它和 ECMA 版本不一致,因为 4627 要求 JSON 文本是对象或列表,而 ECMA 版本只需要“42”或 true 就可以了。最后,4627 允许一些事情,比如对象中的重复键和损坏的 Unicode 字符串,每个人都认为这是不好的做法。

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

RFC7493

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

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

因此,如果您指定您的有效负载必须是 I-JSON 消息,并且接收方会检查这一点,那么您就不必再担心一类特定的攻击了。

ndJSON

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

eJSON

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

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

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

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

参考

于 2013-10-22T00:41:18.640 回答
1

JSON 是 JSON。

道格拉斯·克罗克福德说得最好:

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

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

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

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

JSON 中表示的类型有字符串、数字、布尔值、对象、数组和 null。

它实际上只不过是来自 Javascript 编程语言的一些特定结构。这些构造(如上所述)包括以下内容:

  • 细绳
  • 数字
  • 布尔值
  • 目的
  • 数组
  • 无效的

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

在这里你可以找到更多:

于 2013-09-09T05:46:44.140 回答
0

还有一点需要注意:JSON 的所有这些定义都允许名称(在名称/值对中)在 Javascript 中不是有效的属性名称,例如字段名称在 Javascript 对象中不能以数字或符号开头,并且不能包含空格,但 JSON 名称/值对中的名称可以包含任何字符(可能已转义)。所以 JSON 这个名字有点误导——它更像是一个关联数组,而不是 Javascript 对象的表示。

于 2018-06-29T01:22:39.887 回答