美文网首页
JSON必知必会

JSON必知必会

作者: 耦耦 | 来源:发表于2017-12-03 10:48 被阅读19次

什么是JSON

  • JSON是一种数据交换格式。数据交换格式是一种在不同平台间传递数据的文本格式,像JSON,XML等。
  • JSON独立于编程语言(你不必先学JavaScritp)。
  • JSON基于JavaScript对象字面量表示法(重点在于‘表示法’)。
  • JSON表达数据的方式对通用的编程概念都很友好。

JSON语法

1、JSON基于JavaScript对象字面量
所谓字面量,是对数据值的具体表示。它的字面意思与其想要表达的意思是完全一致的。

2、名称-值对
计算机世界里,名称-值对也被称为键-值对、属性-值对或字段-值对,它们都表示一个意思。

3、正确的JSON语法

示例:

    "property":"value"
在名称中使用多个单词时,我一般会采用驼峰法,就是第一个以外的单词的首字母大写,像这样:lindSayAnimal,但是也可以使用别的方法,
甚至在双引号中使用单引号,像下面这样:
    "my animal": "dog",
    "lindsay's animal": "cat"
这样的写法完全是合法的,但是我建议你最好不要这么做,因为JSON中的名称-值对是一种对很多系统都十分友好的数据结构,而使用空格
和特殊字符(即A~Z、0~9除外的其他字符)忽略了[可移植性](https://baike.baidu.com/item/%E5%8F%AF%E7%A7%BB%E6%A4%8D%E6%80%A7)。

当然,另外需要注意的是,不用于名称,值并不总是需要被双引号包裹。当值是字符串时,必须使用双引号。而在JSON中,还有数字、
布尔值、数组、对象、null等其他数据类型。这些都不应该被双引号包裹。


JSON的全程是javascript对象表示法。接下来了解一下构建一个对象的语法。我们将花括号加在名称-值对的两边来使之成为一个对象。像下面这样,
一个在前,一个在后:
    {"my animal": "dog"}
在JSON中,多个名称-值对使用逗号来分隔。这里我就不细说了。

4、JSON文件使用.json 拓展名
5、JSON媒体类型是application/json

JSON的数据类型

1、对象数据类型
JSON中的对象数据类型非常简单。追根溯源,JSON本身就是对象,也就是被花括号包裹的名称-值对的列表。对象可以嵌套。

2、字符串类型
简单的字符串类型,比如前面提到的"cat"我就不多说了 ,下面重点讲一下稍微复杂一点的。在这之前,我觉得有必要说一下解析器是如何读JSON
的。对于解析器来说,当一个值以双引号(")开始时,它希望接下来的字符串文本以另一个双引号结尾。这意味着这段字符串本身包含
双引号可能会出错。我不知道你是否理解我的意思,我们看一个例子吧:

{
    "promo":"say "BOB'S the best!" at the checkout foe free 8oz bag of kibble."
}

在上面这个例子里,会出现一个问题,因为这时不能仅用一对双引号来包裹数据。否则解析器在解析的时候,遇到第二个双引号就会把它
当成结尾的双引号。然后解析器会发现后面还有很多不属于任何名称-值对的文字,这时就会报错。那么怎么解决这个问题呢?当然是
通过**转译**。也就是在需要转译的字符前面加上一个反斜杠。
还有一些需要转译的字符,就自己百度吧。

3、数字类型
4、布尔类型
5、null类型
6、数组类型
JSON中的数组类型呢也是一个比较重要的类型,上面用的不多的我就不细说,你记住就好。废话不多说,先来看一个例子吧:

    {
        "eggCarton":[
            "eggs",
            "eggs",
            "eggs"
        ]
    }
    //这里名称是eggCarton
    //值是数组
列表项是用逗号隔开,有点像名称-值对的方式,不过关键的区别在于这个列表里面只有值。

JSON Schema

  • JSON验证器负责验证语法错误,JSON Schema负责提供一致性检验。这里需要强调一下"一致性检验",有兴趣可以了解一下。
  • JSON Schema解决的下列有关一致性验证的问题:
    • 值的数据类型是否正确?
    • 是否包含所需要的数据?
    • 值的形式是不是我们需要的?

JSON 的安全性问题

对于这个呢我也只是粗略的了解,接下来我也只能简单的介绍了:

1、跨站请求伪造CSRF:

  • 方式:浏览器对于不同域名的站点之间进行资源分享有一定的限制规则。黑客使用<script>标签来绕开这些规则。有时我们会使用其他站点提供
    的脚本,所以<script>标签不受规则的限制。使用顶层级别数组的JSON是合法的javascrip代码。

  • 原因:这样的攻击能够实现主要是利用你和网站之间的凭证,利用信任关系。

  • 解决方法:用POST替代GET;

拓展一下:
顶层JSON数组指存在于JSON名称-至对之外的位于文档最顶层的JSON数组

2、跨站脚本攻击XSS

  • 方式:当我们从第三方网站获取JSON数据时,很可能数据被劫持,从而运行一些恶意代码。

  • 解决方法:用JSON.parse(jsonString)代替eval();

  • 原因:eval()函数会解析并执行解析出来的代码;JSON.parse()只会解析JSON,不会执行代码。

3、安全漏洞:决策上的失误

这个主要是在一些虽然规范但其实不规矩,比如JSON中包含<html>标签,这时候解析可能就会出问题,就会被攻击;
解决方法也是有的,把HTML代码进行转码。

JSON和客户端框架

  • jQuery:是一种允许开发者专注于操作DOM构建功能的抽象化工具。
  • AngularJS:致力于为用户提供无缝交互的应用体验。

最后

还有一些序列化、反序列化与请求JSON什么的,就不说了。精神高度集中的写这篇笔记,感觉很充实,虽然很累,虽然写的也不好

相关文章

  • JSON必知必会

    SON必知必会 学习网站:SafariBooksOnline 它是什么? 我可以用它做什么? 那些别有用心的人会用...

  • JSON必知必会

    什么是JSON JSON是一种数据交换格式 JSON独立于编程语言,虽然是JS的子集 JSON基于JS对象字面量表...

  • JSON必知必会

    最近看了《JSON必知必会》,做些记录。其实主要是想讲讲语法验证和一致性验证。 文末亦有书籍的相关信息(书名,作者...

  • JSON必知必会

    [toc] JSON必知必会 学习网站:SafariBooksOnline 它是什么?我可以用它做什么?那些别有用...

  • JSON必知必会

    什么是JSON JSON是一种数据交换格式。数据交换格式是一种在不同平台间传递数据的文本格式,像JSON,XML等...

  • 优秀参考文章--性能优化

    Android 性能优化必知必会Android 性能优化必知必会

  • JSON必知必会阅读史

    2018年3月20日14点26分 前言 前后分离逐渐在整个WEB应用开发中成为主流,而作为前后端交互的主要数据格式...

  • json 以及python处理json

    一直是O'Reilly图书的粉丝。想要学习json。O'Reilly系列的json必知必会就非常好。这本书很照顾初...

  • 《JSON必知必会》学习笔记(一)

    什么是JSON JSON全称是Javascript Object Notation(对象表示法),是一种在不同平台...

  • 《JSON必知必会》读后感

    感谢图灵社区的电子书阅读奖励计划。 json是日常使用最为频繁的数据传输方式了,或者说是唯一的方式了。但实际上在使...

网友评论

      本文标题:JSON必知必会

      本文链接:https://www.haomeiwen.com/subject/lczivxtx.html