簡體   English   中英

當響應不包含頭信息時,如何解析json響應

[英]How to parse json response, when the response does not contain header information

我試圖解析一個json響應,以便我可以從一個對象中獲取元素,得到以下錯誤JSONObject文本必須以'{'at 1 [character 2 line 1]開頭

public static  String parseJsonResponse(String json){
    String uId ="";

    try {
         JSONObject jsonObj = new JSONObject(json);
         // String fname = jsonObj.getString("fname");
         //String lname = jsonObj.getString("lname");
         String aId = jsonObj.getString("id");
         uId = aId; 
     } catch (Exception e) {
         e.printStackTrace();
     }
    return uId;
}

這里是使用郵遞員的json回復你會注意到沒有標題

[
    {
        "id": "emplo000000000043567",
        "displayName": "Tester, user1",
           },
    {
        "id": "emplo000000000035386",
        "displayName": "Tester, User2",

    }
]

與上面提到的注釋一樣,這是一個JSON數組,因此需要將其解析為JSON數組而不是JSON對象。 只需使用您正在使用的庫中提供的JSONArray等效項。

另一方面,通過上面的JSON響應,將其解析為JSON數組將失敗,因為格式不正確。 請注意每個對象中每個最后一個鍵值末尾的逗號。 這會導致解析器在嘗試將其解析為JSON數組時失敗。 如果您在此處編寫代碼段時錯誤,則忽略此段落。 否則,如果這是真正的JSON響應,那么我想你需要在Postman論壇上提出一個新問題。

這種情況有幾個想法。 這是我的。

  1. 使用json簡單庫[link]

您可以簡單地將庫更改為json簡單庫,該庫具有json字符串的解析器類,然后在處理json對象之前使用instanceof方法進行檢測。

import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;

public static  String parseJsonResponse(String json){
    String uId ="";

    try {
        JSONParser parser = new JSONParser();
        Object whichone = parser.parse(json);

        if(whichone instanceof JSONObject)
        {
            JSONObject jsonObj = (JSONObject)whichone;
             // String fname = jsonObj.getString("fname");
             //String lname = jsonObj.getString("lname");
            if(jsonObj.containsKey("id"))
                uId = (String)jsonObj.get("id");
       }
        else if(whichone instanceof JSONArray)
        {
            JSONArray jsonArr = (JSONArray)whichone;
            JSONObject jsonObj = null;

            for(int i = 0; i < jsonArr.size(); i++)
            {
                jsonObj = (JSONObject) jsonArr.get(i);
                if(jsonObj.containsKey("id"))
                {
                    uId = (String)jsonObj.get("id");
                    System.out.println(uId);
                }

            }
        }
        else if(whichone instanceof String)
        {
            System.out.println("1?????" + whichone.toString());
        }
        else
        {
            System.out.println("2?????" + whichone.toString());
        }

     } catch (Exception e) {
         e.printStackTrace();
     }
    return uId;
}
  1. 從json excetpion檢測對象類型。 在異常處理期間,您可以捕獲一些字符串是json對象還是json數組。
import org.json.JSONArray;
import org.json.JSONObject;

public static  String parseJsonResponse(String json){
    String uId ="";

    try {
        JSONObject jobj =  new JSONObject(json);

        if(jobj.has("id"))
            uId = jobj.getString("id");

        System.out.println(uId);

     } catch (org.json.JSONException e) {
         //e.printStackTrace();

         JSONArray jsonArr = new JSONArray(json);
         JSONObject jsonObj = null;

         for(int i = 0; i < jsonArr.length(); i++)
            {
                jsonObj = jsonArr.getJSONObject(i);
                if(jsonObj.has("id"))
                {
                    uId = (String)jsonObj.get("id");
                    System.out.println(uId);
                }

            }
     }
    return uId;
}
  1. 用java工作。

在解析第一個字符后,您可以找到它是json對象還是數組。 (我認為它會起作用......)

import org.json.JSONArray;
import org.json.JSONObject;
public static  String parseJsonResponse(String json){
    String uId ="";

    boolean isJobj = json.charAt(0) == '[';

    if(!isJobj) {
        JSONObject jobj =  new JSONObject(json);

        if(jobj.has("id"))
            uId = jobj.getString("id");

        System.out.println(uId);

     } else {
         JSONArray jsonArr = new JSONArray(json);
         JSONObject jsonObj = null;

         for(int i = 0; i < jsonArr.length(); i++)
            {
                jsonObj = jsonArr.getJSONObject(i);
                if(jsonObj.has("id"))
                {
                    uId = (String)jsonObj.get("id");
                    System.out.println(uId);
                }

            }
     }
    return uId;
}

祝你有美好的一天..

首先,你的json格式是錯誤的。 正確的json格式是:

[
    {
        "id": "emplo000000000043567",
        "displayName": "Tester, user1"
    },
    {
        "id": "emplo000000000035386",
        "displayName": "Tester, User2"
    }
]

現在,

  1. 您的響應是JSON數組。 所以首先將解析后的對象分配為JSON數組,作為JSONArray array =(JSONArray)obj ;
  2. 此JSON數組由兩個JSON對象組成,因此遍歷數組,獲取每個JSON對象並打印/返回鍵/值對,無論您想要什么。

下面給出了一個示例代碼:(參見邏輯)

public static void parseJsonResponse(String json)
            throws JsonParseException, JsonMappingException, IOException, ParseException {
        String aId ="";
        JSONParser parser = new JSONParser();
        Object obj = parser.parse(json);
        JSONArray array = (JSONArray) obj;
        for(int i=0;i<array.size();i++)
        {
            JSONObject jsonObject = (JSONObject) array.get(i);
            aId = (String) jsonObject.get("id");
            System.out.println(aId);
        }

    }

注意:我在這里使用了json-simple java庫。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM