英文:
org.json.JSONException: JSONArray[0] is not a JSONObject - Java
问题
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.getJSONArray(i).getJSONObject(0);
double Coupon = jsonobject.getDouble("coupon");
System.out.println(Coupon);
}
}
英文:
Hello I am trying to read and parse a JSON file, when I attempt to read it I got exception of =org.json.JSONException: JSONArray[0] is not a JSONObject
. The JSON is shorten for sake of example. Provided will be my code,json and desired output.
Code:
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"
}
]]
Wanted ooutput
1.03
Any help would be appreciated.
答案1
得分: 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": 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
英文:
The valid JSON should be :
[
{
"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"
}
]
Update the code as well :
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);
}
}
}
Output :
1.03
答案2
得分: 1
如果您再次检查您的 JSON,您会注意到其中有一个数组嵌套在另一个数组中,然后是一个对象。
[ [ { } ] ]
尝试这个输入,[ { } ]
另一种处理方法是在代码中处理,以访问嵌套在 JSON 数组内部的 JSON 对象。
谢谢,希望对您有所帮助。
英文:
if you check again your json you will notice there is array in array and then object.
[ [ { } ] ]
Try this input, [ { } ]
[
{
"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"
}
]
Another way is handle in code to access json array inside a
json array to get json object.
Thanks, I hope that helps you.
答案3
得分: 1
你的 JSON 输入似乎无效:
- 没有 [[...]]
"maturity": ,
可能不是有效的 JSON 节点- 代码
String Coupon = jsonobject.getString("Coupon");
不正确
解决方法:
- 更新 JSON 输入,如 [...]
- 将
maturity
更新为有效的偶数值,如果为空/为null - 将你的代码改为
String coupon = jsonobject.getString("coupon");
英文:
Your JSON input seems invalid:
- No [[...]]
"maturity": ,
maybe not valid json node- code
String Coupon = jsonobject.getString("Coupon");
not correct
Solution:
- Update JSON input like. [...]
- Update
maturity
to a valid even value is empty/null - Change you code to
String coupon = jsonobject.getString("coupon");
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论