如何解析json格式的字符串


package com.json;
 
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
 
public class JsonTest {
    // 解析json(最復雜的解析方法)
    public static void jieXIJSON() {
        String jsonStr = "{\"errorCode\":\"0\",\"errorMsg\" :\"調用接口成功\",\"data\":[{\"username\":\"張文哲\",\"position\":\"student\"}]}";//為了避免二義性,字符串里面的雙印號使用了\轉義字符
        JSONObject root = new JSONObject().parseObject(jsonStr);// 將json格式的字符串轉換成json
        
        String errorCode = root.getString("errorCode");//定義一個字符串,其值為根據json對象中的數據名解析出的其所對應的值
        String errorMsg = root.getString("errorMsg");
        System.out.println("errorCode=" + errorCode + ";errorMsg=" + errorMsg);
        
        JSONArray dataArr = root.getJSONArray("data");//根據json對象中數組的名字解析出其所對應的值
        System.out.println(dataArr);
        
        //對解析出的數組進行遍歷
        for (int i = 0; i < dataArr.size(); i++) {
            JSONObject dataBean = (JSONObject) dataArr.get(i);//得到數組中對應下標對應的json對象
            
            String username = dataBean.getString("username");//根據json對象中的數據名解析出相應數據
            String position = dataBean.getString("position");
            
            System.out.println(username);//打印輸出
            System.out.println(position);
        }
    }
 
    public static void main(String[] args) {
        jieXIJSON(); 
    }
}

其打印輸出結果為:

 

errorCode=0;errorMsg=調用接口成功

[{"position":"student","username":"張文哲"}]

張文哲

student

以上這種解析json對象的方法較為麻煩,代碼較多且復雜。可以利用java的反射機制通過把json對象解析成實體類對象的方式來解析json

 

首先這里有兩個實體類:

 

package com.json;
 
import java.util.ArrayList;
import java.util.List;
 
public class RootEntity {
    private String errorCode;
    private String errorMsg;
    private List<UserEntity> data;
    public String getErrorCode() {
        return errorCode;
    }
    public void setErrorCode(String errorCode) {
        this.errorCode = errorCode;
    }
    public String getErrorMsg() {
        return errorMsg;
    }
    public void setErrorMsg(String errorMsg) {
        this.errorMsg = errorMsg;
    }
    public List<UserEntity> getData() {
        return data;
    }
    public void setData(List<UserEntity> data) {
        this.data = data;
    }
}

 

package com.json;
 
public class UserEntity {
    private String username;
    private String position;
    public String getUsername() {
        return username;
    }
    public void setUsername(String username) {
        this.username = username;
    }
    public String getPosition() {
        return position;
    }
    public void setPosition(String position) {
        this.position = position;
    }
}

解析json字符串的代碼:

package com.json;
 
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
 
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
 
public class JsonTest {
 
    // 解析json(簡單的解析方法,也就是通過json轉實體類)
    public static void jsonToBean() {
        String jsonStr = "{\"errorCode\":\"0\",\"errorMsg\" :\"調用接口成功\",\"data\":[{\"username\":\"張文哲\",\"position\":\"student\"}]}";
        RootEntity rootEntity = new JSONObject().parseObject(jsonStr,RootEntity.class);//將json字符串轉換成json對象,並通過java的反射機制創建相應的實例
        
        System.out.println(rootEntity.getErrorCode());
        System.out.println(rootEntity.getErrorMsg());
        System.out.println(rootEntity.getData());
    }
 
    public static void main(String[] args) {
        jsonToBean();
    }
}

其運行結果如下:

 

0

調用接口成功

[com.json.UserEntity@3f78807]

但是使用這種方法解析json字符串時一定要注意:

 

         所對應的類的屬性名稱和json數據格式中的數據屬性名稱一定要保持一致(原因:其使用了java反射機制)

 

 


免責聲明!

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



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