org.json.JSONException: JSONArray[0] не является JSONObject — Java

#java #arrays #json

#java #массивы #json

Вопрос:

Здравствуйте, я пытаюсь прочитать и проанализировать файл 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
  

Любая помощь будет оценена.

Ответ №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" } ]

Другой способ — это обработка в коде для доступа к массиву json внутри массива json для получения объекта json.

Спасибо, я надеюсь, что это вам поможет.

Ответ №3:

Ваш ввод JSON кажется недопустимым:

  • Нет [[…]]
  • "maturity": , возможно, недопустимый узел json
  • String Coupon = jsonobject.getString("Coupon"); неправильный код

Решение:

  • Обновите ввод JSON, как. […]
  • Обновление maturity до допустимого четного значения является пустым / нулевым
  • Измените свой код на String coupon = jsonobject.getString("coupon");