51Testing软件测试论坛

 找回密码
 (注-册)加入51Testing

QQ登录

只需一步,快速开始

微信登录,快人一步

查看: 1881|回复: 0

[原创] json是什么,如何处理转义?

[复制链接]

该用户从未签到

发表于 2019-4-8 15:04:29 | 显示全部楼层 |阅读模式
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

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对象的转义。
回复

使用道具 举报

本版积分规则

关闭

站长推荐上一条 /1 下一条

小黑屋|手机版|Archiver|51Testing软件测试网 ( 沪ICP备05003035号 关于我们

GMT+8, 2024-3-28 18:21 , Processed in 0.065367 second(s), 24 queries .

Powered by Discuz! X3.2

© 2001-2024 Comsenz Inc.

快速回复 返回顶部 返回列表