簡體   English   中英

[Java]:無法解析其中沒有數組/子數組的JSON

[英][Java]: Unable to parse a JSON with no array / sub array in it

我正在使用json-simple-1.1.jar並嘗試從json中獲取多個(至少3個)值,如代碼部分所示。

我的代碼適用於具有多個數組的JSON,但不適用於簡單的json格式。

{
"Addresses": {
    "UserName": "Rahul", 
    "Status": "Active", 
    "CreateDate": "2017-01-09T11:39:31.244Z", 
    "SecretAccessKey": "ABCD-EFGH-HIJK", 
    "AccessKeyId": "1234567"
 }
}

以下是我嘗試使用的Java邏輯:

public static String[] getValuesFromJson(String filename, Object key, int exp_sizeOfArray, String[] exp_keys) throws FileNotFoundException, IOException, ParseException { 

    String valuesFromJson[] = new String[exp_keys.length]; 

    /** Create a JSONParser object*/
    JSONParser parser = new JSONParser();

    /** Read the JSON file using parser*/
    JSONObject jsonObject = (JSONObject) parser.parse(new FileReader(
            filename));

    System.out.println("JsonObject size: "+jsonObject.keySet().size());
    for (Object object : jsonObject.keySet()) {
        System.out.println(jsonObject.get(object.toString()));
    }
    /** Get the values in JSONArray using the key*/
    JSONArray jsonArray = (JSONArray) jsonObject.get(key);
    for (int i = 0; i < jsonArray.size(); i++) {

        /** Add the individual set from JSONArray to a JSONObject */
        JSONObject subJsonObject = (JSONObject) parser.parse(jsonArray.get(i).toString());

        /** Check for expected size of array */
        if(subJsonObject.size() <= exp_sizeOfArray){
            int index=0;
            /** Check for each key value in the sub-JSONObject keySet*/
            for (Object object : subJsonObject.keySet()) {

                /** Iterate until the expected key value matches with the actual value*/
                for (int j = 0; j < exp_keys.length; j++) {

                    /** Check if the expected key matches with any of the key value*/
                    if(object.toString().trim().equals(exp_keys[j].toString().trim())){
                        System.out.println("Key: '".concat(object.toString()).concat("'\tValue: '").concat(subJsonObject.get(object)+"'"));
                        valuesFromJson[index] = subJsonObject.get(exp_keys[j]).toString();
                        index++;
                        break;
                    }
                }
            } 
        }
    }

    /** Return the value of expected key*/
    return valuesFromJson;
}

我收到錯誤消息:“在以下行中無法將“ org.json.simple.JSONObject強制轉換為org.json.simple.JSONArray”:

JSONArray jsonArray = (JSONArray) jsonObject.get(key);

您正在嘗試將JSONObjectJSONArray ,但是沒有數組。 而是獲取所有對象鍵並對其進行迭代。

如果轉到json.org( 1 ),則可以在此處找到:

數組是值的有序集合。 數組以[(左括號)開頭,以](右括號)結尾。 值之間以,(逗號)分隔

瞧! 完成它而無需將JSONObject轉換為JSONArray

JSONObject jsonObject = (JSONObject) parser.parse(new FileReader(
            filename));
    /** Creating another JSONObject here */
    JSONObject jsonObject2 = (JSONObject) parser.parse(jsonObject.get(key).toString());
    for (Object newKey : jsonObject2.keySet()) {
        System.out.println("Key: '".concat(newKey.toString()).concat("'\tValue: '").concat(jsonObject2.get(newKey)+"'"));
    }

謝謝你們的幫助!

暫無
暫無

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

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