JSON必知必会

2017-12-03  本文已影响19人  耦耦

什么是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 的安全性问题

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

1、跨站请求伪造CSRF:

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

2、跨站脚本攻击XSS

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

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

JSON和客户端框架

最后

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

猜你喜欢

热点阅读