javaWeb前後端中 JSON&JSON字串&java實體物件 之間轉換
JSON是前端js語言中, 用來與其他語言互動的一種輕量級的資料交換格式, 交換時以字串形式傳遞, 各語言再進行解析即可使用; 相比於XML語言, JSON用來傳輸資料, 層次結構清晰簡單, 目前已基本取代XML, 廣泛被用來跨語言傳輸資料;
一. JSON的資料定義格式:
型別 | 語法 | 解釋 |
物件型別 | {name:value,name:value...} | 其中name是字串型別,而value是任意型別, 類似於java中的Map; |
陣列/集合型別 | [value,value,value...] | 其中value是任意型別 |
混合型別 | [{},{}... ...] 或 {name:[]... ...} | 合理包裹巢狀物件型別和陣列型別 |
二. 基於實用的原則, 以下分講:
1. 在js中解析Json字串
i. 方法: JSON.parse()
用法:var jsonObj=JSON.parse(JASON字串), 得到JSON
注意: 這種方法可以安全地將獲取到的JSON字串轉為JSON
ii. 方法:eval()
用法:var jsonObj = eval(“(“+json+”)”);
注意:該方法會執行JSON字串中可能存在的程式碼;
另: 在字串兩側拼接左右括號 ( 和 ) 是為了強制其將括號內內容作為解析物件解析成JSON, 使用時作為固定格式即可;
2. 在java中將物件, 集合, 陣列轉換為JSON字串 (基於Jackson)
程式碼如下:(使用 import com.fasterxml.jackson.databind.ObjectMapper;)
ObjectMapper om = new ObjectMapper();
String s = om.writeValueAsString(object);//object可以為任意物件
注意: Object轉換為JSON字串時,僅放入成員屬性,捨棄方法;
其中: java物件和Map均將轉為JSON中的物件格式, java陣列和單列集合則轉換為JSON的陣列格式;
3. 在java中解析JSON字串 (基於Jackson)
i. 簡單的解析:
舉例:
ObjectMapper om = new ObjectMapper();
Object object = om. readValue(json字串,Object.calss)
ii. 陣列/集合內嵌Java物件格式解析:
舉例:
List<Category> list2 = om.readValue(s, new TypeReference<List<Category>>() {});
注意: 這裡需要用到: com.fasterxml.jackson.core.type.TypeReference;
傳入該介面匿名類物件作為readeVlaue的引數2即可;
需要留意的是,需要定義出於與該結構中巢狀相同的Java類,否則直接用 "簡單的解析:" 時,內層若碰到物件格式JSON, 則自動轉換為LikedListMap型別;