JSON對象
JSON:JavaScript對象表示法(JavaScript Object Notation)跨語言使用
json 基本類型 {“key”:value, “key”:value……}
數組類型 {[{“key”:value },{ key”:value }……]} 在打印中大括號沒顯示
基本類型與數組類型能夠相互嵌套
| { "name": "teacher", "computer": { "CPU": "intel7", "disk": "512G" }, "students": [ { "name": "張三", "age": 18, "sex": true }, { "name": "李四", "age": 19, "sex": false } ] } |
注意: 存儲結構是KEY-VALUE
key為string類型
value為:String Boolean Number 數組 Object null
Json 串以{開始,以}結尾;
Json 串中數組是以[開始,以]結尾;
Json 串中 Object 是以{開始,以}結尾
由於json中存在雙引號,手動拼接json對象需要\對引號進行轉義
gson解析處理
google提供的類庫,將JSON字符串與java對象轉換
將架包設置在web項目的 web-inf\lib\目錄下
將java對象轉為Json字符串
首先獲取對象,再將對象轉為字符串
對象也可以是數組和容器對象
String json引用=new Gson().toJson(對象);
或者預先對轉換器進行聲明
Gson gson=new Gson();
String json引用=gson.toJson(對象);
| User user = new User(1,"zhangsan","123123"); String json = new Gson().toJson(user); System.out.println(json); |
將Json字符串轉為java對象
直接轉換
先創建轉換器
Gson gson = new Gson();
根據數組還是對象執行不同的參數
1 Json字符串為單一javabean對象
類名 對象引用=gson.fromJson(jsonstr, 對象引用.class)
| Gson gson = new Gson(); User user = gson.fromJson(json, User.class); //采用user接收json字符串的,參數為用來接收的反射類 |
(注意,接收對象的javabean需要空構造)
2 Json字符串為一維數組 數組內無多層嵌套
容器<范型> 引用=
gson.fromJson(jsonstr,new TypeToken<容器<范型>>(){}.getType());
| String json2 = "[\"aaa\",\"bbb\",\"bbb\"]"; Gson gson = new Gson(); List<String> list = gson.fromJson(json2, new TypeToken<List<String>>(){}.getType()); //通過list容器存儲 |
若Json字符串為多個對象的數組,將范型改為對應的對象類
| String json3 = "[{\"userId\":1,\"userName\":\"zhangsan\",\"userPwd\":\"123123\"},{\"userId\":2,\"userName\":\"lisi\",\"userPwd\":\"111111\"},{\"userId\":3,\"userName\":\"wangwu\",\"userPwd\":\"234567\"}]"; Gson gson = new Gson(); List<User> userList = gson.fromJson(json3, new TypeToken<List<User>>(){}.getType()); |
若存在多層嵌套可以在接收對象中存在參數為容器,才能存儲
節點解析
1獲取解析器
JsonParser parser = new JsonParser();
2將json字符串轉為JsonElement對象
JsonElement element= parser.prese(jsonstr);
3獲取節點,解析節點
獲取根節點;再在根節點的基礎上獲取各個節點;若節點為可取值節點則進行取值
根節點的獲取
JsonObject root = element.getAsJsonObject();根節點為對象
根節點若為數組的情況通過Array進行接收
下級節點的獲取
JsonObject 子節點= 父節點.getAsJsonObject(“key”);
JsonPrimitive 子節點= 父節點.getAsJsonPrimitive(“key”);
JsonArray 子節點=父節點.getAsJsonArray(“key”);
節點的取值
JsonPrimitive類型
String name = primitive2.getAsString();
boolean flag = primitive.getAsBoolean();
通過各數據類型的getAs數據類型()方法獲取值
JsonObject 類型
通過javabean接收
User user = new Gson().fromJson(userObject, User.class);
JsonArray類型
通過容器接收.同上
節點概念
Gson的節點對象:
JsonElement 所有的節點都是JsonElement 對象
JsonPrimitive 基本的數據類型的節點對象
JsonNull 代表空節點對象,即 有 key,value 為空
JsonObject 對象數據類型的節點對象
JsonArray 數組數據類型的節點對象
JsonElement的取值:
1 JsonPrimitive value的取值對應 java 的
int,double,float,long,short,boolean,char,byte,String,
BigDecimal,BigI nteger,Number
2 JsonObject value 的取值對應 java 的 Object 對象.
3 JsonArray value 的取值對應 java 的 List 及其子類對象.
注:數組節點也能通過增強for遍歷進行處理
| for (JsonElement user : jsonArray) { UserBean userBean = new Gson().fromJson(user, new TypeToken<UserBean>() {}.getType());} |
FastJson解析處理
對象轉字符串
對象轉json通過靜態方法實現
JSON.toJSONString(對象) 使用所有對象
json字符串轉對象
對象 通過JSON.parseObject()方法
UserBean user=JSON.parseObject(jsonstr, UserBean.class )
容器(數組) 通過JSON.parseArray ()方法
List<String> list = JSON.parseArray(json2, String.class);
List<User> userList = JSON.parseArray(json3, User.class);
均為靜態方法
