为什么要使用JSON?

为什么要使用JSON?

在微服务数据传输时,被要求使用JSON进行传输,想写一篇关于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

JSON XML 结论
可读性 简易语法 规范的标签形式 平分秋色,不同场景下各有优势
可扩展性 可扩展 (比XML强) 可扩展 因为 JSON是JS标准的子集合,所以它在JS处理扩展时更优优势,可存储JS复合对象
编码难度 可编码 (比XML强) 支持Dom4j、Dom、SAX等 XML编码方式有很多,但是JSON也可以很快的编码,并且在代码量(对结构解析)上要较XML少
解码难度 各不相同,解码要看被解码的数据格式和编码规则,JSON和XML都遵循自己的解码方式

XML 和 JSON 代码比较

  • XML
<?xml version="1.0" encoding="utf-8"?>
<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>
  • JSON
{
    "name": "中国",
    "province": [{
        "name": "黑龙江",
        "cities": {
            "city": ["哈尔滨", "大庆"]
        }
    }, {
        "name": "广东",
        "cities": {
            "city": ["广州", "深圳", "珠海"]
        }
    }, {
        "name": "台湾",
        "cities": {
            "city": ["台北", "高雄"]
        }
    }, {
        "name": "新疆",
        "cities": {
            "city": ["乌鲁木齐"]
        }
    }]
}

JSON代码层次更清晰更容易阅读。由于字符简洁,在数据传输过程中,JSON比XML更优秀,可减少传输数据所占用的宽带

JSON支持的数据类型

四种基础类型

  • 字符串(String)
    如:“A”,“B”
  • 数字(Numbers)
    如:1,2
  • 布尔型(Booleans)
    如:true / false

两种结构类型

  • 对象
    {K1,V1 : K2,V2 : K3,V3}
    K为String类型,V为JSON支持的任意类型之一。并且键值对是无序的。
  • 数组
    [1,2,3]
    顺序排列的零个或多个JSON数据类型

JSONArray类型

一个JSONArray有多个JSONObject,是我们在研发中常用的类型。

JSON的使用

介绍JavaScript和Java中的使用方式

JavasScript 使用

JSON格式是1999年《JavaScript Programming Language, Standard ECMA-262 3rd Edition》的子集合,所以可以在JavaScript以eval()函数(javascript通过eval()调用解析器)读入。

JS使用演示

/**
 * 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'; })()}");
});

JAVA使用

这里特指:com.alibaba.fastjson

  • 工程中导入依赖
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.4</version>
</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的原因:

  • JSON数据清晰
  • JSON有很多工具类支持它的转换
  • JSON在所有主流浏览器有很好的支持
  • JSON在传输时数据量更小
  • JSON在JS中有天然的语言优势(因为它是标准的子集合)

猜你喜欢

转载自blog.csdn.net/Cy_LightBule/article/details/88405519