#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": ,
возможно, недопустимый узел jsonString Coupon = jsonobject.getString("Coupon");
неправильный код
Решение:
- Обновите ввод JSON, как. […]
- Обновление
maturity
до допустимого четного значения является пустым / нулевым - Измените свой код на
String coupon = jsonobject.getString("coupon");