JavaScript Object Notation,JS 对象标记,是一种轻量级的数据交换格式。
JSON 标准
JSON 介绍
简介
JSON 采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
JSON 是 Douglas Crockford 在2001年开始推广使用的数据格式,在2005年-2006年正式成为主流的数据格式。
语法
在 JS 语言中,一切都是对象。因此,任何支持的类型都可以通过 JSON 来表示,例如字符串、数字、对象、数组等。但是对象和数组是比较特殊且常用的两种类型:
- 对象表示为键值对
- 数据由逗号分隔
- 花括号保存对象
- 方括号保存数组
JSON 与 JS 对象的关系
JSON 是 JS 对象的字符串表示法,它使用文本表示一个 JS 对象的信息,本质是一个字符串。
var obj = {a: 'Hello', b: 'World'}; //这是一个对象,注意键名也是可以使用引号包裹的
var json = '{"a": "Hello", "b": "World"}'; //这是一个 JSON 字符串,本质是一个字符串
JSON 和 JS 对象互转
// 对象转换为 JSON 字符串,使用 JSON.stringify() 方法
var json = JSON.stringify({a: 'Hello', b: 'World'}); //结果是 '{"a": "Hello", "b": "World"}'
// JSON 转换为对象,使用 JSON.parse() 方法
var obj = JSON.parse('{"a": "Hello", "b": "World"}'); //结果是 {a: 'Hello', b: 'World'}
重点:特殊字符处理
json 结构里使用的标示符有:冒号:、双引号”“、大括号{}、方括号[]、逗号,
标准使用时,并没有什么问题。但如果键值是 textarea 输入的内容时,就有可能会带来特殊字符,此时就需要额外处理了,否则 JSON.parse() 时报错 Uncaught SyntaxError: Invalid or unexpected token
。
常见的特殊处理的转义字符
\a 响铃(BEL)、\b 退格(BS)、\e 科学计数法、\f 换页(FF)、\n 换行(LF)、\r 回车(CR)、\t 水平制表(HT)、\v 垂直制表(VT)、\\ 反斜杠、\" 双引号字符、\0 空字符(NULL)
解决
根据需要添加处理项。
/**
* JSON 字符串特殊字符处理
*
* @param s
* @return
*/
public static String string2Json(String s) {
StringBuffer sb = new StringBuffer();
for (int i = 0; i < s.length(); i++) {
char c = s.charAt(i);
switch (c) {
case '\"':
sb.append("\\\"");
break;
case '\\':
sb.append("\\\\");
break;
case '/':
sb.append("\\/");
break;
case '\b':
sb.append("\\b");
break;
case '\f':
sb.append("\\f");
break;
case '\n':
sb.append("\\n");
break;
case '\r':
sb.append("\\r");
break;
case '\t':
sb.append("\\t");
break;
default:
sb.append(c);
break;
}
}
return sb.toString();
}
JSON API
FastJSON、Gson和Jackson性能对比
Jackson:源代码,基于 Java 语言的开源 JSON 格式解析工具。
Gson:Google 解析Json的一个开源框架。
FastJSON:阿里巴巴开发的一个 Java 编写的 JSON 处理器。开源,使用Apache License 2.0协议开源。
- | Jackson | Gson | FastJSON |
---|---|---|---|
研发 | Spring MVC 内置 | 阿里巴巴 | |
开源 | 是 | 是 | 是 |