JSON詳解


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

keystring類型

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();

2json字符串轉為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);

       均為靜態方法


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM