【问题标题】:org.json.JSONException: JSONArray[0] is not a JSONObject - Javaorg.json.JSONException: JSONArray[0] 不是 JSONObject - Java
【发布时间】:2020-09-26 04:14:19
【问题描述】:

您好,我正在尝试读取和解析 JSON 文件,当我尝试读取它时,出现 =org.json.JSONException: JSONArray[0] is not a JSONObject 异常。为了举例,JSON 被缩短了。将提供我的代码、json 和所需的输出。

代码:

public void Trial () throws JSONException {
        String json = "[[{"appId": "MBSP","askPrice": 0,"bidPrice": 0,"collectionDataSource": "ExternalTick","collectionName": "FRM_MBS_TBA_FN_15Y_0.03_FWD0","collectionObservationTime": "2020-09-21T17:47:59.703Z","collectionType": "LIVE","coupon": 1.03,"createdBy": "Test","createdOn": "2020-09-21T17:47:59.703Z","createdOnDate": 0,"forward": 0,"issuingAgency": "FF","lastUpdated": "2020-09-21T17:47:59.703Z","lastUpdatedBy": "string","lastUpdatedDate": 0,"maturity": ,"midPrice":0 ,"mtaVersionNumber": 0,"settlementDate": "2020-09-21T17:47:59.703Z"}]]
 ";
        JSONArray jsonObj = new JSONArray(json);
        for (int i = 0; i < jsonObj.length(); i++) {
            JSONObject jsonobject = jsonObj.getJSONObject(i);
            String Coupon = jsonobject.getString("Coupon");
            System.out.println(Coupon);
        }
    }

JSON:

[[
  {
    "appId": "MBSP",
    "askPrice": 0,
    "bidPrice": 0,
    "collectionDataSource": "ExternalTick",
    "collectionName": "FRM_MBS_TBA_FN_15Y_0.03_FWD0",
    "collectionObservationTime": "2020-09-21T17:47:59.703Z",
    "collectionType": "LIVE",
    "coupon": 1.03,
    "createdBy": "Test",
    "createdOn": "2020-09-21T17:47:59.703Z",
    "createdOnDate": 0,
    "forward": 0,
    "issuingAgency": "FF",
    "lastUpdated": "2020-09-21T17:47:59.703Z",
    "lastUpdatedBy": "string",
    "lastUpdatedDate": 0,
    "maturity": ,
    "midPrice":0 ,
    "mtaVersionNumber": 0,
    "settlementDate": "2020-09-21T17:47:59.703Z"
  }
]]

想要的输出

 1.03

任何帮助将不胜感激。

【问题讨论】:

    标签: java arrays json


    【解决方案1】:

    有效的 JSON 应该是:

    [
      {
        "appId": "MBSP",
        "askPrice": 0,
        "bidPrice": 0,
        "collectionDataSource": "ExternalTick",
        "collectionName": "FRM_MBS_TBA_FN_15Y_0.03_FWD0",
        "collectionObservationTime": "2020-09-21T17:47:59.703Z",
        "collectionType": "LIVE",
        "coupon": 1.03,
        "createdBy": "Test",
        "createdOn": "2020-09-21T17:47:59.703Z",
        "createdOnDate": 0,
        "forward": 0,
        "issuingAgency": "FF",
        "lastUpdated": "2020-09-21T17:47:59.703Z",
        "lastUpdatedBy": "string",
        "lastUpdatedDate": 0,
        "maturity": 0,
        "midPrice":0 ,
        "mtaVersionNumber": 0,
        "settlementDate": "2020-09-21T17:47:59.703Z"
      }
    ]
    

    同时更新代码:

    public class Sample {
    
        public static void main(String[] args) {
            String json = "[{\n" + 
                    "   \"appId\": \"MBSP\",\n" + 
                    "   \"askPrice\": 0,\n" + 
                    "   \"bidPrice\": 0,\n" + 
                    "   \"collectionDataSource\": \"ExternalTick\",\n" + 
                    "   \"collectionName\": \"FRM_MBS_TBA_FN_15Y_0.03_FWD0\",\n" + 
                    "   \"collectionObservationTime\": \"2020-09-21T17:47:59.703Z\",\n" + 
                    "   \"collectionType\": \"LIVE\",\n" + 
                    "   \"coupon\": 1.03,\n" + 
                    "   \"createdBy\": \"Test\",\n" + 
                    "   \"createdOn\": \"2020-09-21T17:47:59.703Z\",\n" + 
                    "   \"createdOnDate\": 0,\n" + 
                    "   \"forward\": 0,\n" + 
                    "   \"issuingAgency\": \"FF\",\n" + 
                    "   \"lastUpdated\": \"2020-09-21T17:47:59.703Z\",\n" + 
                    "   \"lastUpdatedBy\": \"string\",\n" + 
                    "   \"lastUpdatedDate\": 0,\n" + 
                    "   \"maturity\": 0,\n" + 
                    "   \"midPrice\": 0,\n" + 
                    "   \"mtaVersionNumber\": 0,\n" + 
                    "   \"settlementDate\": \"2020-09-21T17:47:59.703Z\"\n" + 
                    "}]";
            JSONArray jsonObj = new JSONArray(json);
            for (int i = 0; i < jsonObj.length(); i++) {
                JSONObject jsonobject = jsonObj.getJSONObject(i);
                double Coupon = jsonobject.getDouble("coupon");
                System.out.println(Coupon);
            }
        }
    
    }
    

    输出:

    1.03
    

    【讨论】:

      【解决方案2】:

      如果您再次检查您的 json,您会注意到数组中有数组,然后是对象。 [ [ { } ] ]

      试试这个输入,[ { } ]

      [ { "appId": "MBSP", "askPrice": 0, "bidPrice": 0, "collectionDataSource": "ExternalTick", "collectionName": "FRM_MBS_TBA_FN_15Y_0.03_FWD0", "collectionObservationTime": "2020-09-21T17:47:59.703Z", "collectionType": "LIVE", "coupon": 1.03, "createdBy": "Test", "createdOn": "2020-09-21T17:47:59.703Z", "createdOnDate": 0, "forward": 0, "issuingAgency": "FF", "lastUpdated": "2020-09-21T17:47:59.703Z", "lastUpdatedBy": "string", "lastUpdatedDate": 0, "maturity": , "midPrice":0 , "mtaVersionNumber": 0, "settlementDate": "2020-09-21T17:47:59.703Z" } ]

      另一种方法是在代码中处理以访问 a 内的 json 数组 json数组获取json对象。

      谢谢,希望对你有帮助。

      【讨论】:

        【解决方案3】:

        您的 JSON 输入似乎无效:

        • 没有 [[...]]
        • "maturity": , 可能不是有效的 json 节点
        • 代码String Coupon = jsonobject.getString("Coupon");不正确

        解决方案:

        • 更新 JSON 输入,如。 [...]
        • 更新maturity 为有效偶数值为空/null
        • 将您的代码更改为String coupon = jsonobject.getString("coupon");

        【讨论】:

          猜你喜欢
          • 2018-11-14
          • 2018-06-05
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-11-09
          相关资源
          最近更新 更多