在微服务数据传输时,被要求使用JSON进行传输,想写一篇关于JSON的博客。
百度百科
JSON(JavaScript Object Notation, JS 对象简谱) 是一种轻量级的数据交换格式。它基于 ECMAScript (欧洲计算机协会制定的js规范)的一个子集,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成,并有效地提升网络传输效率。
维基百科
JSON(JavaScript Object Notation,JavaScript对象表示法)是一种由道格拉斯·克罗克福特构想和设计、轻量级的数据交换语言,该语言以易于让人阅读的文字为基础,用来传输由属性值或者序列性的值组成的数据对象。尽管JSON是JavaScript的一个子集,但JSON是独立于语言的文本格式,并且采用了类似于C语言家族的一些习惯。
JSON 数据格式与语言无关,脱胎自JavaScript,但当前很多编程语言都支持 JSON 格式数据的生成和解析。JSON 的官方 MIME 类型是 application/json,文件扩展名是 .json。
JSON | XML | 结论 | |
---|---|---|---|
可读性 | 简易语法 | 规范的标签形式 | 平分秋色,不同场景下各有优势 |
可扩展性 | 可扩展 (比XML强) |
可扩展 | 因为 JSON是JS标准的子集合,所以它在JS处理扩展时更优优势,可存储JS复合对象 |
编码难度 | 可编码 (比XML强) |
支持Dom4j、Dom、SAX等 | XML编码方式有很多,但是JSON也可以很快的编码,并且在代码量(对结构解析)上要较XML少 |
解码难度 | 平 | 平 | 各不相同,解码要看被解码的数据格式和编码规则,JSON和XML都遵循自己的解码方式 |
<country>
<name>中国name>
<province>
<name>黑龙江name>
<cities>
<city>哈尔滨city>
<city>大庆city>
cities>
province>
<province>
<name>广东name>
<cities>
<city>广州city>
<city>深圳city>
<city>珠海city>
cities>
province>
<province>
<name>台湾name>
<cities>
<city>台北city>
<city>高雄city>
cities>
province>
<province>
<name>新疆name>
<cities>
<city>乌鲁木齐city>
cities>
province>
country>
{
"name": "中国",
"province": [{
"name": "黑龙江",
"cities": {
"city": ["哈尔滨", "大庆"]
}
}, {
"name": "广东",
"cities": {
"city": ["广州", "深圳", "珠海"]
}
}, {
"name": "台湾",
"cities": {
"city": ["台北", "高雄"]
}
}, {
"name": "新疆",
"cities": {
"city": ["乌鲁木齐"]
}
}]
}
JSON代码层次更清晰更容易阅读。由于字符简洁,在数据传输过程中,JSON比XML更优秀,可减少传输数据所占用的宽带
K为String类型,V为JSON支持的任意类型之一。并且键值对是无序的。
顺序排列的零个或多个JSON数据类型
一个JSONArray有多个JSONObject,是我们在研发中常用的类型。
介绍JavaScript和Java中的使用方式
JSON格式是1999年《JavaScript Programming Language, Standard ECMA-262 3rd Edition》的子集合,所以可以在JavaScript以eval()函数(javascript通过eval()调用解析器)读入。
/**
* JSON的序列化
*/
function test() {
// 定义一个JSON格式的字符换
var str = "{'id': 1, 'name':'frank', 'sex':1}";
// 将JSON数组转换为JSON对象(适用于 IE8+、Firefox 3.5+、Chrome4+、/Safari4+、Opera10+ 浏览器)
var json = eval(str);
// 在不支持原生JSON对象的浏览器也可以使用parseJSON方法进行读取
var jsonPars = parseJSON(str);
// eval 和 parseJSON区别
// parseJSON采用解析器验证读入的代码是否真的是JSON代码,安全性更高。但是,由于这是用模拟的方式读取,速度比eval()慢;
}
/**
* 一个直接跳转的例子
*/
$(function(){
var json= eval("{message:(function (){ window.location='http://zh.wikipedia.org/wiki/JSON#.E5.AE.89.E5.85.A8.E6.80.A7.E5.95.8F.E9.A1.8C'; })()}");
});
这里特指:com.alibaba.fastjson
<dependency>
<groupId>com.alibabagroupId>
<artifactId>fastjsonartifactId>
<version>1.2.4version>
dependency>
// 声明并实例化
JSONObject jsonObj = new JSONObject();
// 放入元素
jsonObj.put("element","元素");
// 序列化成JSON字符串
jsonObj.toJSONString();
//************************** 演示JSONArray的创建,放入元素和转换 *********************
// 创建JSON对象oneJson
JSONObject oneJson = new JSONObject();
oneJson.put("one", "一");
// 创建JSON对象twoJson
JSONObject twoJson = new JSONObject();
twoJson.put("two", "二");
// 声明并实例化Json数组,并把两个JSON对象放入
JSONArray numberJsonArr = new JSONArray();
numberJsonArr.add(oneJson);
numberJsonArr.add(twoJson);
// 将JSON数组转换为JSON字符串
String jsonArrayString = numberJsonArr.toJSONString();
// 将JSON字符串转换为JSON数组
JSONArray formatingJsonArray = JSONArray.parseArray(jsonArrayString);
使用JSON的原因: