簡體   English   中英

有效的 JSON 拋出 JSONArray[0] 不是 JSONObject

[英]Valid JSON throwing JSONArray[0] is not a JSONObject

我有有效的 JSON 經JSONLintJSON Formatter and Validator 驗證 我在 SO 上看到過其他帖子,例如:

提取 JSON 的代碼如下:

JSONObject jsonObject = new JSONObject(strData);
JSONArray jsonADSArray = jsonObject.getJSONArray("advance_purchases");
int i = 0;
while(i < jsonADSArray.length()){

    JSONObject obj = jsonADSArray.getJSONObject(i);

}

該行:

JSONObject obj = jsonADSArray.getJSONObject(i);

拋出錯誤:

JSONArray[0] is not a JSONObject

其中 strData 使用 REST POST 傳入:

{
    "advance_purchases": [
        "{ \"_id\":40, \"cancel_date\":1585760255892, \"cancel_user\":\"FACTORY\", \"create_date\":1585760206434, \"create_user\":\"FACTORY\", \"purchase_date\":1585918800000, \"purchase_id\":728, \"rejected\":0, \"remote_id\":-1, \"synced\":0 }",
        "{ \"_id\":53, \"cancel_date\":1585921300976, \"cancel_user\":\"Shipped\", \"create_date\":1585914517011, \"create_user\":\"FACTORY\", \"purchase_date\":1585918800000, \"purchase_id\":728, \"rejected\":0, \"remote_id\":-1, \"synced\":0 }",
        "{ \"_id\":54, \"cancel_date\":1585945994083, \"cancel_user\":\"Shipped\", \"create_date\":1585914517021, \"create_user\":\"FACTORY\", \"purchase_date\":1585929600000, \"purchase_id\":729, \"rejected\":0, \"remote_id\":-1, \"synced\":0 }",
        "{ \"_id\":41, \"cancel_date\":1585760255920, \"cancel_user\":\"FACTORY\", \"create_date\":1585760207083, \"create_user\":\"FACTORY\", \"purchase_date\":1586005200000, \"purchase_id\":728, \"rejected\":0, \"remote_id\":-1, \"synced\":0 }",
        "{ \"_id\":42, \"cancel_date\":1585760255932, \"cancel_user\":\"FACTORY\", \"create_date\":1585760207093, \"create_user\":\"FACTORY\", \"purchase_date\":1586016000000, \"purchase_id\":729, \"rejected\":0, \"remote_id\":-1, \"synced\":0 }",
        "{ \"_id\":56, \"cancel_date\":0, \"cancel_user\":\"\", \"create_date\":1585921279663, \"create_user\":\"FACTORY\", \"purchase_date\":1586005200000, \"purchase_id\":728, \"rejected\":0, \"remote_id\":-1, \"synced\":0 }",
        "{ \"_id\":57, \"cancel_date\":0, \"cancel_user\":\"\", \"create_date\":1585921279685, \"create_user\":\"FACTORY\", \"purchase_date\":1586016000000, \"purchase_id\":729, \"rejected\":0, \"remote_id\":-1, \"synced\":0 }",
        "{ \"_id\":43, \"cancel_date\":1585861077997, \"cancel_user\":\"Purchase Changed\", \"create_date\":1585760207724, \"create_user\":\"FACTORY\", \"purchase_date\":1586091600000, \"purchase_id\":728, \"rejected\":0, \"remote_id\":-1, \"synced\":0 }",
        "{ \"_id\":44, \"cancel_date\":0, \"cancel_user\":\"\", \"create_date\":1585860099795, \"create_user\":\"FACTORY\", \"purchase_date\":1586102400000, \"purchase_id\":729, \"rejected\":0, \"remote_id\":-1, \"synced\":0 }",
        "{ \"_id\":55, \"cancel_date\":0, \"cancel_user\":\"\", \"create_date\":1585914513604, \"create_user\":\"FACTORY\", \"purchase_date\":1586091600000, \"purchase_id\":728, \"rejected\":0, \"remote_id\":-1, \"synced\":0 }",
        "{ \"_id\":45, \"cancel_date\":1585861078013, \"cancel_user\":\"Purchase Changed\", \"create_date\":1585860109341, \"create_user\":\"FACTORY\", \"purchase_date\":1586178000000, \"purchase_id\":728, \"rejected\":0, \"remote_id\":-1, \"synced\":0 }",
        "{ \"_id\":46, \"cancel_date\":0, \"cancel_user\":\"\", \"create_date\":1585860109353, \"create_user\":\"FACTORY\", \"purchase_date\":1586188800000, \"purchase_id\":729, \"rejected\":0, \"remote_id\":-1, \"synced\":0 }",
        "{ \"_id\":58, \"cancel_date\":0, \"cancel_user\":\"\", \"create_date\":1585921275924, \"create_user\":\"FACTORY\", \"purchase_date\":1586178000000, \"purchase_id\":728, \"rejected\":0, \"remote_id\":-1, \"synced\":0 }",
        "{ \"_id\":47, \"cancel_date\":1585861078023, \"cancel_user\":\"Purchase Changed\", \"create_date\":1585860107142, \"create_user\":\"FACTORY\", \"purchase_date\":1586264400000, \"purchase_id\":728, \"rejected\":0, \"remote_id\":-1, \"synced\":0 }",
        "{ \"_id\":48, \"cancel_date\":0, \"cancel_user\":\"\", \"create_date\":1585860107157, \"create_user\":\"FACTORY\", \"purchase_date\":1586275200000, \"purchase_id\":729, \"rejected\":0, \"remote_id\":-1, \"synced\":0 }",
        "{ \"_id\":59, \"cancel_date\":0, \"cancel_user\":\"\", \"create_date\":1585921275944, \"create_user\":\"FACTORY\", \"purchase_date\":1586264400000, \"purchase_id\":728, \"rejected\":0, \"remote_id\":-1, \"synced\":0 }",
        "{ \"_id\":49, \"cancel_date\":1585861078031, \"cancel_user\":\"Purchase Changed\", \"create_date\":1585860105853, \"create_user\":\"FACTORY\", \"purchase_date\":1586350800000, \"purchase_id\":728, \"rejected\":0, \"remote_id\":-1, \"synced\":0 }",
        "{ \"_id\":50, \"cancel_date\":0, \"cancel_user\":\"\", \"create_date\":1585860105865, \"create_user\":\"FACTORY\", \"purchase_date\":1586361600000, \"purchase_id\":729, \"rejected\":0, \"remote_id\":-1, \"synced\":0 }",
        "{ \"_id\":60, \"cancel_date\":0, \"cancel_user\":\"\", \"create_date\":1585921275964, \"create_user\":\"FACTORY\", \"purchase_date\":1586350800000, \"purchase_id\":728, \"rejected\":0, \"remote_id\":-1, \"synced\":0 }",
        "{ \"_id\":51, \"cancel_date\":1585861078040, \"cancel_user\":\"Purchase Changed\", \"create_date\":1585860137954, \"create_user\":\"FACTORY\", \"purchase_date\":1586437200000, \"purchase_id\":728, \"rejected\":0, \"remote_id\":-1, \"synced\":0 }",
        "{ \"_id\":52, \"cancel_date\":1585861078049, \"cancel_user\":\"Purchase Changed\", \"create_date\":1585860138874, \"create_user\":\"FACTORY\", \"purchase_date\":1586523600000, \"purchase_id\":728, \"rejected\":0, \"remote_id\":-1, \"synced\":0 }"
    ]
}

jsonADSArray.length()

返回 21

既然JSON已經驗證過了,為什么代碼會報錯?

它確實是一個有效的 JSON。 但是"{ \"_id\":40, ... , \"synced\":0 }"不是object它是一個string (注意開頭和結尾的"

先嘗試反序列化:

JSONObject jsonObject = new JSONObject(strData);
JSONArray jsonADSArray = jsonObject.getJSONArray("advance_purchases");
int i = 0;
while(i < jsonADSArray.length()){
    String value = jsonADSArray.getString(i);
    JSONObject obj = new JSONObject(value);
}

暫無
暫無

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

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