不同类型的JSON

问题描述 投票:2回答:3

我在看这个问题

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中的其他可能结构及其名称是什么?

谢谢...希望我很清楚

json web-services validation data-structures specifications
3个回答
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媒体类型是application / json。

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

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

  • 布尔
  • 宾语
  • 阵列
  • 空值

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

你可以在这里查询更多详情:


1
投票

唯一的区别在于规格:

以下是不同之处:

  • 在六个结构字符中的任何一个之前或之后允许不重要的空格。(RFC 4627)
  • 在任何令牌之前或之后允许无关紧要的空格。(ECMA-404)
  • JSON文本应以Unicode编码。默认编码为UTF-8。 (RFC 4627)
  • JSON文本是由符合JSON值语法的Unicode代码点形成的标记序列。 (ECMA-404)
  • 实现绝不能在JSON文本的开头添加字节顺序标记。 (RFC7159)
  • I-JSON消息中的对象不得包含具有重复名称的成员。 (RFC7493)
  • 每行都是有效的JSON和\n行分隔符(ndJSON)

而他们背后的理由:

踢4627

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

RFC7159

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

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

拉法493

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

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

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

ndJSON

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

eJSON

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

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

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

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

参考


0
投票

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

© www.soinside.com 2019 - 2024. All rights reserved.