[TOC]javascript
JSON (JavaScript Object Notation, JS 對象標記) 是一種輕量級的數據交換格式,用徹底獨立於編程語言的文本格式來存儲和傳輸數據。(能夠用於代替XML)html
語法以下:前端
注意:java
- 屬性與值之間用冒號 : 隔開,屬性與屬性之間用逗號 , 隔開
- json 串在 js 中會解析成對象。對象名稱必須用單引號或者雙引號包裹起來。value若是是字符串或者時間日期,也必須用引號引發來
[索引]
.name
萬變不離其宗,再複雜的 json 對象均可以經過兩種解析語法獲得對象中的 value 值,只不過取值次數多幾回而已git
number
徹底一致true
或false
string
null
Array
表示方式——[]
{ ... }
表示方式json對象:若是 js 對象的數據存儲格式符合上述 json 對象的定義語法,則稱該 js 對象爲 json對象github
json字符串:json 對象的字符串表示法,簡單地說,就是將 json 對象用引號引發來,使用文本表示一個 js 對象的信息數據庫
json對象才能夠經過兩種解析語法進行取值,而轉換成json字符串後則不能夠直接取值編程
在項目過程當中,若是出現如下場景:json
MySQL
等關係型數據庫或者 Redis
緩存數據庫時,數據庫字段中存儲的是 json 字符串格式的數據因此,將 json 字符串轉換爲 java 對象或者將 java 對象轉換爲 json 字符串是很是有必要的。後端
json的轉換工具是經過java編寫並封裝好的一些jar工具包,實現java對象或集合與json格式字符串的互換。
fastjson 是阿里巴巴的開源 JSON 解析庫,它能夠解析 JSON 格式的字符串,支持將 Java Bean 序列化爲 JSON 字符串,也能夠從 JSON 字符串反序列化到 JavaBean。
maven項目中導入jar包依賴
<dependency> <groupId>com.alibaba</groupId> <artifactId>fastjson</artifactId> <version>1.2.28</version> </dependency>
/** * @param object 任意java對象 * @return json字符串 */ public static String toJSONString(Object object) {}
調用方法:JSON.toJSONString(obj)
/** * 字符串轉列表List * @param text json字符串 * @param clazz 指定轉換的包裝類型 * @param <T> List泛型,即指定的包裝類型 * @return */ public static <T> List<T> parseArray(String text, Class<T> clazz) {} /** * 字符串轉map * @param text json字符串 * @param clazz 轉換成的存儲類型:Map.class * @param <T> 存儲類型 * @return */ //如下兩種方式均可以將json串轉換成對應的map集合 public static <T> T parseObject(String text, Class<T> clazz) {} public static JSONObject parseObject(String text) {}
調用:JSON.parseArray("", Animal.class)
,JSON.parseObject("", Map.class)
,JSON.parseObject("")
瞭解更多:具體案例
注意
- 若是非 json 格式的字符串經過轉換工具來進行轉換時,就會拋出異常
- JSONObject是Map接口的實現類,因此當返回值爲JSONObject時,能夠直接用Map對象進行接收
JavaScript 內置了 JSON 的解析,支持任何 JavaScript 對象序列化成一個JSON格式的字符串,一個JSON格式的字符串反序列化成一個 JavaScript 對象(json 對象能夠直接在 javascript 中使用,經過解析語法取值)
JSON.stringify(obj)
JSON.parse(string)
eval('(' + jsonStr + ')')
eval() 使用注意:
- json字符外包裹一對小括號
- eval() 函數也能夠將字符串轉爲json對象,但不推薦,由於這種方式不安全,eval會執行json串中的表達式