Json 基础知识

Json 基础知识,工作中用到,简单了解下

一、 json 相关概念

json 插队学习

json是什么? json是一种数据交换格式

专业术语:

JSON: JavaScript对象表示法(JavaScript Object Notation )
表示法:一个用于表示诸如数字或单词等数据的字符系统
数据交换格式:用于在不同的平台或系统间交换数据的文本, 如xml json等
可移植性: 以一种对双方系统都兼容的方式在平台间传递信息 ?

json源于JavaScript的一个子集,但是json是独立于语言的
json表达数据的方式对通用的编程概念都很友好

二、 json的语法

1、 字面量

json 是基于JavaScript字面量的 ,可以理解为从字面上读出的一些属性或值

2、 名称-值对

即 一个名称加一个值

"animal":"cat" , animal 是名词,cat是值, json使用冒号 “:”来分割名称和值,名称始终在左侧,值始终在右侧

3、正确的json语法

名称: 始终需要加双引号,注意是双引号,可以是任何有效的字符串,如下面也是合法的:

    "my animal" : "cat"
    "Lindsay's animial" : "cat"

但是!!为了获得最大可移植性,最好不要加空格和特殊字符。
如果多个字符,建议这样写:

    "LindsaysAnimal" : "cat"
    "myAnimal" : "dog"

json使用 { } 加在名称-值对的两边,使之成为一个对象, 多个名称-值对间,使用逗号分隔。
如:

{"myAnimal" : "dog", "color":"black"}

4、json语法验证

一些工具或网站:
Json Formatter & Validator
Json Edit Online (http://www.jsoneditoronine.com)
Json lint (http://jsonlint.com)

5 json 文件

以.json为后缀名

json中的数据类型

对象
数字 ( 整形 5, 浮点形 5.09, 定点形:??)
字符串
布尔型 (真或假)
数组
null

1 嵌套对象
使用嵌套对象来描述一个人:

{
    "person":{
        "name":"Lindsay Bassett",
        "heightInInches": 66,
        "head":{
            "hair":{
                "color": "light blond",
                "length":"short",
                "style": "A-line"
            },
        "eyes":"green"
        }
    }
}

错误的示例:

{
    "person": "say "bob is very tall " hello hah"
}
值中,双引号又使用了双引号

修改为(加转义字符\):

{
"person": "say \"bob is very tall \" hello hah"
}

下面示例错误:

{
    "dir": "c:\apache27"
}

修改为:
{
"dir": "c:\apache27"
}

需要转义的字符:

\"
\\
\/
\b   (退格符)
\f   换页符)
\t  (制表符)
\n  (换行符)
\r  (回车符)
\u   (后面跟16进制字符)

如下面正确示例:
{
"dir": "\sory , saf \n sfa"
}

JSON中其他数据类型: null,数组等

{
"hairy":false,
"count":1,
"wacthColor":null, #不带手表 无颜色特征
"hands":["lefthand","righthand"]
}

三 Json schema

什么是 Schema?
当我们在描述 文字链接 的时候,需要约定数据的组织方式,比如,需要知道有哪些字段,这些字段的取值如何表示等,这就是 JSON Schema 的来源。

我们以 文字链接 为例,它对应的 JSON Schema 大概如此:

{
 "type": "object",
   "properties": {
     "text": {
           "type": "string",
           "title": "文字"
       },
        "href": {
           "type": "string",
           "title": "链接地址(URL)"
        }
 }
}

JSON Schema 定义了如何基于 JSON 格式描述 JSON 数据结构的规范,进而提供数据校验、文档生成和接口数据交互控制等一系列能力。

它的特性和用途,可以大致归纳为以下几点:

1. 用于描述数据结构

在描述 JSON 数据时,如果数据本身的复杂度很高,高到三维四维,普通的标签函数已经无法表示这种层级结构了,而 JSON Schema 利用 object 和 array 字段类型的反复嵌套,可以规避掉这个缺陷。

当然,除了键值等基本信息,规范层面还提供了丰富的关键词支持,如果想通过自定义扩展字段,解决特定场景的业务需求,也是非常方便的。

2. 用于构建人机可读的文档

计算机领域有个概念叫做自描述。所谓自描述,可以理解为:文档本身包含了自身与其他文档交互相关的描述信息,不需要其他的配置文件或者额外信息来描述。

而 JSON Schema 就是自描述的,它本身就是一份很完善的说明文档,字段的含义说明、该如何取值、格式的要求等都清晰明了。

3. 用于生成模拟数据

通过标签函数生成模拟数据,只能解决基本的格式要求。比如 string 类型的字段,模拟出来的数据,无非是一个随机字符串。

但在 JSON Schema 中,由于字段的描述不仅仅是类型,更多的约束条件,可以确保模拟数据更接近于真实数据。

4. 用于校验数据,实现自动化测试

接口数据的校验工作,往往依赖于测试代码逻辑和用例。如果用 JSON Schema 描述一个数据接口,就不需要再编写测试代码了,所有的逻辑都可以移植到 JSON Schema 中维护。配合 jsv、tv4 等二方校验工具,接口测试可以真正自动化。

例子:

{
 "$schema": "http://json-schema.org/draft-04/schema#",
    "title": "TextLinks",
    "description": "文字链接",
    "type": "array",
    "items": {
     "type": "object",
       "properties": {
         "text": {
               "type": "string",
               "title": "文字"
           },
            "href": {
               "type": "string",
               "title": "链接地址(URL)"
            }
     }
    },
    "maxItems": 10,
    "minItems": 5
}

其他信息 参考链接: https://blog.csdn.net/xiong9999/article/details/53688336

四、 JSON中的安全问题

服务端和客户端的关系: 可以理解为客户端为发生在浏览器端的一切。服务端,为发生在服务器端的一切。 包含大量的请求和响应

跨站请求伪造

跨站请求伪造,CSRF,cross-site request forgery, 读作 sea surf,是一种列用站点对用户浏览器信任而发起攻击的行为。 仅包括利用信任机制进行的攻击

利用json进行csrf攻击的例子:

json中保存敏感信息:
[
    {
        "user":"liliy"          
    },
    {
        "password" : "555-666-888"
    }
]
此json经过校验是合法的。
但是此合法的json非常危险的,被称为顶层JSON数组,很容易被黑客攻击。 

如何组织CSRF攻击?将顶层JSON数组放入到{}中,使其称为非法的JavaScript,
这样就不会被

你可能感兴趣的:(Json 基础知识)