一、JSON——JavaScript Object Notation

JSON 是一种语法用来序列化对象、数组、数值、字符串、布尔值和null 。它基于 JavaScript 语法,但与之不同:一些JavaScript不是JSON,一些JSON不是JavaScript

JavaScript 与 JSON 的区别
JavaScript类型 JSON 区别
对象和数组

属性名称必须是双引号字符串;

最后一个属性后不能有逗号。

数值

前导零是禁止的(在 JSON.stringify 零将被忽略,但在 JSON.parse 它将抛出 SyntaxError);

小数点后必须至少有一位数字。

字符串

只有有限的一些字符可能会被转义;

禁止某些控制字符;

Unicode 行分隔符 (U+2028)和段分隔符 (U+2029)被允许 ;

字符串必须是双引号。

请参见以下示例,其中JSON.parse()能够正常解析,但把它当作JavaScript解析时会抛出 SyntaxError 错误:

let code = '"\u2028\u2029"';
JSON.parse(code); // 工作正常
eval(code); // 失败

主要有两种方法:

JSON.parse() :解析一个JSON字符串,可选地转换生成的值及其属性,并返回值。

JSON.stringify():返回与指定值相对应的一个JSON字符串,可选地仅包含某些属性或以用户定义的方式替换属性值。

1.1 对象和数组

1)json属性名称必须是双引号字符串

js中对象和数组属性名可以加双引号或者单引号或者不加引号,都能识别。

console.log({"text" : 1 });//Object {text: 1}
console.log({'text' : 1 });//Object {text: 1}
console.log({text : 1 });//Object {text: 1}

json中属性名称必须是双引号字符串,即使是单引号也不行(JSON.parse转换会报错)。

json属性名不加引号报错:

JSON.parse('{text : 1 }');
//Uncaught SyntaxError: Unexpected token t in JSON at position 1
//at JSON.parse (<anonymous>) 

json属性名单引号报错。

JSON.parse("{'text' : 1 }");
//Uncaught SyntaxError: Unexpected token ' in JSON at position 1
//at JSON.parse (<anonymous>)

替换成属性双引号:

JSON.parse('{"text" : 1 }');
2)json最后一个属性后不能有逗号
 JSON.parse('[1, 2, 3, 4, ]');
JSON.parse('{"text" : 1, }');
//Uncaught SyntaxError: Unexpected token ] in JSON at position 13
//at JSON.parse (<anonymous>)

1.2 数值

1) 前导零是禁止的(在 JSON.stringify 零将被忽略,但在 JSON.parse 它将抛出 SyntaxError)

数字不能用 0 开头,比如01。

 JSON.parse('{"text" : 01 }');
//VM63:1 Uncaught SyntaxError: Unexpected token t in JSON at position 1
//at JSON.parse (<anonymous>)

正确写法:去除数字前0

JSON.parse('{"text" : 1 }');
2) 小数点后必须至少有一位数字
 JSON.parse('{"text" : 1. }');
//Uncaught SyntaxError: Unexpected token t in JSON at position 1
// at JSON.parse (<anonymous>)

正确写法:小数点后添加0

JSON.parse('{"text" : 1.0 }');

二、完整的json语法

JSON = null
or true or false
or JSONNumber
or JSONString
or JSONObject
or JSONArray

JSONNumber

JSONNumber = - PositiveNumber//正数
or PositiveNumber//负数 PositiveNumber = DecimalNumber
or DecimalNumber . Digits
or DecimalNumber . Digits ExponentPart
or DecimalNumber ExponentPart
DecimalNumber = 0 //
or OneToNine Digits // 1-9
ExponentPart = e Exponent
or E Exponent
Exponent = Digits
or + Digits
or - Digits
Digits = Digit
or Digits Digit
Digit = 0 through 9//0-9
OneToNine = 1 through 9//1-9

JSONString

JSONString = ""
or " StringCharacters " StringCharacters = StringCharacter
or StringCharacters StringCharacter StringCharacter = any character
except " or \ or U+0000 through U+001F
or EscapeSequence //任意字符,除了 " 或者 \ 或者 U+0000 - U+001F 或者 转义序列 EscapeSequence = \" or \/ or \\ or \b or \f or \n or \r or \t
or \u HexDigit HexDigit HexDigit HexDigit
// \" 或者 \/ 或者 \\ 或者 \b 或者 \f 或者 \n 或者 \r 或者 \t 或者 \u HexDigit HexDigit HexDigit HexDigit 16进制数字 HexDigit = 0 through 9//0-9
or A through F //A-F
or a through f //a-f

JSONObject

JSONObject = { }
or { Members }
Members = JSONString : JSON
or Members , JSONString : JSON

JSONArray

JSONArray = [ ]
or [ ArrayElements ] //数组元素
ArrayElements = JSON
or ArrayElements , JSON

无效的空格可能存在于JSONNumber(数字必须不包含空格)或JSONString(其中它被解释为字符串中的相应字符,否则将导致错误)之外的任何位置。

制表符(U+0009),回车(U+000D),换行(U+0020)和空格(U+0020)字符是唯一有效的空格字符。

参考:

mdn: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/JSON

最新文章

  1. linux下VMware安装出现的问题解决
  2. Android GridView的使用
  3. .Net母版页
  4. 设置Eclipse智能提示
  5. 基于NodeJs的网页爬虫的构建(一)
  6. python自动化执行脚本
  7. eclipse升级后Android使用JAR报错
  8. 2. 托管对象数据模型的基本知识(Core Data 应用程序实践指南)
  9. 201521123042 《Java程序设计》第4周学习总结
  10. S0.0 计算机如何看东西
  11. nodejs连接阿里云物联网套件(mqtt)
  12. 2.NB-IoT及通信协议
  13. Docker端口映射及创建镜像演示(二)--技术流ken
  14. Java获取环境变量
  15. 利用powerful number求积性函数前缀和
  16. win10老提示系统错误,要注销
  17. 使用vi时提示 write error in swap file
  18. 应用Strong Name保存.NET应用程序集
  19. Lingo 做线性规划 - Marketing Applications
  20. express中间件笔记整理

热门文章

  1. What&#39;s your name?
  2. 雅虎日本如何用 Pulsar 构建日均千亿的消息平台
  3. Asciinema:你的所有操作都将被录制
  4. SpingBoot之集成Redis集群
  5. redis 底层数据结构
  6. Feign 调用丢失Header的解决方案
  7. nyoj 513-A+B Problem IV (java BigDecimal, stripTrailingZeros, toPlainString)
  8. Python3.7.1学习(二)使用schedule模块定时执行任务
  9. 搭建Redis三主三从集群
  10. HTML页面插入图片,使用background还是img标签