小课堂【萌新】

json是什么,如何处理转义?

分享人:汪胜

目录

1.背景介绍

2.知识剖析

3.常见问题

4.解决方案

5.编码实战

6.扩展思考

7.参考文献

8.更多讨论

1.背景介绍

在JSON出现之前,人们一直用XML来传递数据。因为XML是一种纯文本格式,所以它适合在网络上交换数据。XML本身不算复杂,但是,加上DTD、XSD、XPath、XSLT等一大堆复杂的规范以后 ,XML使用起来很繁琐。后来,出现了JSON。JSON是道格拉斯·克罗克福特(DouglasCrockford)在2001年开始推广使用的数据格式,在2005年-2006年正式成为主流的数据格式,雅虎和谷歌就在那时候开始广泛地使用JSON格式。

2.知识剖析

JSON简介

JSON (JavaScript Object Notation, JS 对象标记) 是一种轻量级的数据交换格式。它基于 ECMAScript (w3c制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。数据传输是我们在敲代码时,经常遇到的一个场景,前后端交互。给数据一个统一的格式有利于我们编写和解析数据。json,是一种数据格式,在与后端的数据交互中有较为广泛的应用。

JSON语法

  • 数据在名称/值对中
  • 数据由逗号分隔
  • 大括号保存对象
  • 中括号保存数组
     

JSON值

  • 数字(整数/浮点数)
  • 字符串
  • 布尔值(true/false)
  • 数组(中括号中)
  • 对象(大括号中)
  • null
                    
  var json = {"password":123456,"name":"myname","Booleans":true,"Array":[x,y,z],"object":{}}
                    
                
JSON嵌套
                    
                      myObj = {
                          "name":"jnshu",
                          "alexa":1000,
                          "sites": {
                              "site1":"www.jnshu.com",
                              "site2":"m.jnshu.com",
                              "site3":"c.jnshu.com"
                          }
                      }
                      console.log(myObj)
                    //输出结果:
                    Object {name: "jnshu", alexa: 1000, sites: Object}
                    
                

JSON使用

JSON.parse()将字符串转化为对象

JSON.stringify()将对象转化为字符串

                    
                        var str = '{ "name": "cxh", "sex": "man" }';//  JSON字符串
                        var obj = JSON.parse(str); //由JSON字符串转换为JSON对象
                          //读取
                        Alert(obj.name);
                        Alert(obj.sex);
                        var a = { "name": "cxh", "sex": "man" };//JSON对象
                        var b =JSON.stringify(a); //将JSON对象转化为JSON字符
                    
                

3.常见问题

如何处理转义

4.解决方案

在用JSON.parse解析JSON对象时会对其中的转义符进行两次解析

将字符串'{"a":"b","b":"\\\\"}'传递给JSON.parse(),首先解析器提取单引号括起来的字符串时认为第一个\转义第二个\ ,第三个\转义第四个\, 也就是说实际可输出字符串是{"a":"b","b":"\\"}(可通过console.log('{"a":"b","b":"\\\\"}')验证),之后正式转为js对象的时候还有一次转义, 也就是实际输出字符转中的第一个\转义第二个\(此时只有两个\)。 所以console.log(JSON.parse('{"a":"b","b":"\\\\"}') );输出结果为Object {a: "b", b: "\"}, 也就是说实际显示的数据为一个\(实际可输出一个\说明在此之前还有一个\)。

总结:JSON.parse的参数包含转移字符的时候会遇到两次转义的问题,其实第一次是字符串本身的转义,第二次是真正转为js对象的转义。

5.编码实战

6.扩展思考

7.参考文献

JSON对象 -- JavaScript 标准参考教程(alpha)

JSON.stringify 语法实例讲解

JSON.parse() - JavaScript

8.更多讨论

鸣谢

感谢大家观看

By 汪胜