你真的了解JSON吗?
一、JSON——JavaScript Object Notation
JSON 是一种语法用来序列化对象、数组、数值、字符串、布尔值和null 。它基于 JavaScript 语法,但与之不同:一些JavaScript不是JSON,一些JSON不是JavaScript。
JavaScript类型 | JSON 区别 |
---|---|
对象和数组 |
属性名称必须是双引号字符串; 最后一个属性后不能有逗号。 |
数值 |
前导零是禁止的(在 JSON.stringify 零将被忽略,但在 JSON.parse 它将抛出 SyntaxError); 小数点后必须至少有一位数字。 |
字符串 |
只有有限的一些字符可能会被转义; 禁止某些控制字符; Unicode 行分隔符 (U+2028)和段分隔符 (U+2029)被允许 ; 字符串必须是双引号。 请参见以下示例,其中JSON.parse()能够正常解析,但把它当作JavaScript解析时会抛出 let code = '"\u2028\u2029"'; |
主要有两种方法:
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
最新文章
- linux下VMware安装出现的问题解决
- Android GridView的使用
- .Net母版页
- 设置Eclipse智能提示
- 基于NodeJs的网页爬虫的构建(一)
- python自动化执行脚本
- eclipse升级后Android使用JAR报错
- 2. 托管对象数据模型的基本知识(Core Data 应用程序实践指南)
- 201521123042 《Java程序设计》第4周学习总结
- S0.0 计算机如何看东西
- nodejs连接阿里云物联网套件(mqtt)
- 2.NB-IoT及通信协议
- Docker端口映射及创建镜像演示(二)--技术流ken
- Java获取环境变量
- 利用powerful number求积性函数前缀和
- win10老提示系统错误,要注销
- 使用vi时提示 write error in swap file
- 应用Strong Name保存.NET应用程序集
- Lingo 做线性规划 - Marketing Applications
- express中间件笔记整理
热门文章
- What&#39;s your name?
- 雅虎日本如何用 Pulsar 构建日均千亿的消息平台
- Asciinema:你的所有操作都将被录制
- SpingBoot之集成Redis集群
- redis 底层数据结构
- Feign 调用丢失Header的解决方案
- nyoj 513-A+B Problem IV (java BigDecimal, stripTrailingZeros, toPlainString)
- Python3.7.1学习(二)使用schedule模块定时执行任务
- 搭建Redis三主三从集群
- HTML页面插入图片,使用background还是img标签