接口測試-JSON數據解析方式

2020年05月31號更新,解析JSON格式數據的兩種方式,第一種方式引入開源的jar包,第二種方式自己封裝公共讀取方法,在這裏先簡單的記錄一下,方便後續查看。

方式一 利用JsonPath解析

1、 JsonPath的使用方法

  • 首先需要引入jar包
    <dependency>
        <groupId>com.jayway.jsonpath</groupId>
        <artifactId>json-path</artifactId>
        <version>2.4.0</version>
    </dependency>
    
  • 常用解析方式總結
    1、靜態讀取API(需要多次讀取時不推薦使用,因爲每次讀取都要解析一遍文檔)Response response ;
    String json = resposne.asString();
    String result = JsonPath.read(json,"$.data.departCode")
    2、先解析整個文檔,再讀取
    Object document = Configuration.defaultConfiguration().jsonProvider().parse(json);
    String result1 = JsonPath.read(document,"$.data.departments[0].departCode");
    List<String> result2 = JsonPath.read(document,"$.data.departments[?(@.id>0)].departCode");
    3、比較靈活的一個方法
    ReadContext ctx = JsonPath.parse(testJson);
    String result1 = ctx.read("$.data.departments[0].departCode");
    List<String> result2 = ctx.read("$.data.departments[?(@.id==0)].departCode");
    4、filter方式獲取數據
    Filter cheapFictionFilter1 = filter(where("departCode").is("知名專家團隊").and("id").eq(1));
    Filter cheapFictionFilter = filter(where("departCode").exists(true));
    List<String> result3 = parse(testJson).read("$.data.departments[?]", cheapFictionFilter);
    注:佔位符?代表過濾器,當有多個過濾器時用類似這種方式去表示[?,?]
    

這兒就附上官方參考地址:JsonPath

方式二 自己封裝解析方法

  • 下面的代碼如果編寫有誤或者可以優化的地方還請大家指正

    import com.alibaba.fastjson.JSONArray;
    import com.alibaba.fastjson.JSONObject;
    
    public class JsonUtil {
        /**
         * 獲取json串某一字段的值
         *
         * @param response 接口返回的json值轉換後
         * @param keys     調用示例 String str = JsonUtils.getJsonValueRec(string,"data.departments.subDepartments.name",0);
         * @param index    需要取列表中第幾個的值,一般傳0就可以
         * @return 返回String類型的結果值
         */
        public static String getJsonValueRec(String response, String keys, int index) {
            String[] key = keys.split("\\.");
            if (key.length == 1) {
                if (response.startsWith("[")) {
                    return parseJsonArray(response, index, key[0]);
                }
                if (response.startsWith("{")) {
                    return parseJsonObject(response, key[0]);
                }
            } else if (key.length > 1) {
                if (response.startsWith("[")) {
                    response = parseJsonArray(response, index, key[0]);
                    keys = keys.substring(key[0].length() + 1);
                    return getJsonValueRec(response, keys, index);
                }
                if (response.startsWith("{")) {
                    response = parseJsonObject(response, key[0]);
                    keys = keys.substring(key[0].length() + 1);
                    return getJsonValueRec(response, keys, index);
                }
            }
            return "No corresponding value found";
        }
    
        private static String parseJsonArray(String response, int index, String key) {
            JSONArray resultArray = JSONObject.parseArray(response);
            return resultArray.getJSONObject(index).getString(key);
        }
    
        private static String parseJsonObject(String response, String key) {
            JSONObject jsonObject = JSONObject.parseObject(response);
            return jsonObject.get(key).toString();
        }
    }
    
  • 最後附上自己測試的JSON數據格式,作爲一個測試猿編寫完肯定要充分測試的,就先記錄這麼多,後續有更好的解析方法會更新

    {
        "resCode":0,
        "msg":"SUCCESS",
        "firstJson":{
            "secondJson":"sencondJson value",
            "secondJson1":[
                {
                    "thirdJson":1234,
                    "thirdJson1":[
                        {
                            "fourthJson":[
                                {
                                    "fifthJson":true
                                }
                            ]
                        }
                    ],
                    "thirdJson2":{
                        "fourthJsonList":"fourthJson list value",
                        "fourthJsonList1":"fourthJson list value1"
                    }
                }
            ],
            "secondJson2":{
                "thirdJsonList":"thirdJson list value",
                "thirdJsonList1":"thirdJson list value1"
            }
        }
    }
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章