什么是JSON?

宏观上看,它是一种轻量的数据格式,在各种地方传递数据。
微观上看,JSON里的数据是被保存在花括号({})中的。
从用途上看,JSON是一种数据交换格式。(像XML这种也是一种数据交换格式)。

JSON是独立于编程语言的一种能被多种系统用于交换数据的的数据交换格式。然后通过各种系统的解析器将JSON文本转换为系统可以读取的形式。

JSON是一种基于JavaScript对象表示法的数据交换格式。

表示法:一个用于表示诸如数字或单词等数据的字符系统。
可移植性:以一种对双方系统都兼容的方式在平台间传递信息。

JSON基于JavaScript对象字面量

字面量(literal):所谓字面量,是对数据值的具体表示。
例如:x = 55是字面量,x是变量。

JSON是基于Javascript对象字面量的,所以他们看起来很像。
这是合法的JSON

{
"title":"This is my title",
"body":"This is my body"
}

这是不合法的JSON,这是一种JavaScript对象

{  
	'title':"This is my title",  
	'body':"This is my body" 
}

正确的JSON语法

JSON中的始终需要被双引号包裹。
下面两种格式虽然也可以,但是最好不要这么做。因为JSON中的键值对是一种对许多系统都十分友好的数据结构,而使用空格和特殊字符(即a-z、0-9除外的其他字符)忽略了可移植性,如果我们这么做的话会直接降低JSON数据的可移植性;因此为了获得最大可移植性,应尽可能避免使用空格或特殊字符。

1."My animal" : "cat"
2."Lindsay's animal" : "cat"
所以如果想用多个单词,一般这样写:
"lindsaysAnimal" : "cat"
这里面的不是必须被双引号包裹的,当是字符串时,必须使用双引号包裹,但是还有数字布尔值数组对象,NULL等这些不应该被双引号包裹。

JSON在线验证工具
验证示例:

validatorresult

JSON的媒体类型

媒体类型也有其他称呼:比如:“互联网媒体类型”,“内容类型”,“MIME类型”
它使用“类型/子类型”这种格式来表示。比如"text/html"

JSON的媒体类型是"application/json"

JSON中的数据类型
  • JSON的字符串类型:

    • 一个字符串值,如"my string",使用双引号包裹。
  • JSON的布尔类型:

    • true或false
  • JSON的数字类型:

    • 一个数字值,如42,可以使正整数、负整数、小数或指数。
  • JSON的null类型:

    • 一个表示空值的null值。
  • JSON的数组类型:

    • 数组是值的集合或列表,每个值都可以是字符串,数字,布尔值,对象或数组中的任何一种,数组必须被方括号[] 包裹,且值与值之间用逗号隔开。
  • JSON的对象类型:

    • 对象类型是使用逗号分隔的名称-值对构成的集合,并使用花括号{}包裹。

对象和数组很关键的一个区别就是,对象是名称-值对构成的列表或集合,数组是值构成的列表或集合。
对象和数组另一个关键的区别是,数组中所由的值应具有相同的数据类型。

JSON Schema

本身也是一种JSON字符串。是一种模式,一种约束。必须按这个Schema写。Schema的例子如下:

{
    "$schema": "http://json-schema.org/draft-04/schema#",
    "title": "Product",
    "description": "A product from Acme's catalog",
    "type": "object",
    "properties": {
        "id": {
            "description": "The unique identifier for a product",
            "type": "integer"
        },
        "name": {
            "description": "Name of the product",
            "type": "string"
        },
        "price": {
            "type": "number",
            "minimum": 0,
            "exclusiveMinimum": true
        }
    },
    "required": ["id", "name", "price"]
}

参数说明:
$schema:$schema关键字状态,表示这个模式与v4规范草案书写一直。
title:实体名称。
description:用来描述实体。
type:实体类型。
properties:定义实体属性。
required:实体必须的属性。

JSON中的安全问题

JSON.parse():只编译不执行,代替eva():先编译后执行。

安全漏洞:决策上的失误

不那么规矩的JSON:

{
	"message":"<div \"alert('gotcha')\">hover here.</div>"
}

当它在页面的消息页面输出时,就会造成威胁。黑客可以通过该脚本获取你在这一页面上的所有私人信息,并发送到它自己的网站并保存。
可以键消息中的所有HTML字符进行转码,这样的话,诸如<div>这样的标签就会被转换成&lt;div&gt;,然后插入页面(&lt;div&gt;不是合法的HTML)。

不想写了。。。。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值