我正在尝试使用JSON数据填充类对象,并且我一直收到此错误
org.json.JSONException:机器报告没有值
以下是示例json文件,我正在尝试使用
{
"id" : 1,
"reports": [
{
"id": "1",
"title": "For Reorder",
"subtitle": "Report Name",
"date": "Monday, Aug 08, 2016",
"machinereports": [
{
"name": "Reorder List",
"count": "9"
},
{
"name": "Reorder List Critical",
"count": "9"
}
]
}
]
}
以下是我尝试使用
检索和填充我的类对象的代码public class Report {
public String id;
public String title;
public String subtitle;
public String date;
public ArrayList<String> machinereports = new ArrayList<>();
public static ArrayList<Report> getReportsFromFile(String filename, Context context) {
final ArrayList<Report> reportList = new ArrayList<>();
try {
// Load Data
String jsonStr = loadJsonFromAsset("reports.json", context);
JSONObject jsonOne = new JSONObject(jsonStr);
JSONArray reports = jsonOne.getJSONArray("reports");
// Get Report objects from data
for(int i = 0; i < reports.length(); i++) {
Report report = new Report();
report.id = reports.getJSONObject(i).getString("id");
report.title = reports.getJSONObject(i).getString("title");
report.subtitle = reports.getJSONObject(i).getString("subtitle");
report.date = reports.getJSONObject(i).getString("date");
// Get inner array listOrReports
JSONArray rList = jsonOne.getJSONArray("machinereports");
for(int j = 0; j < rList.length(); j++) {
JSONObject jsonTwo = rList.getJSONObject(j);
report.machinereports.add(jsonTwo.getString("reportName"));
/* report.machinereports.add(jsonTwo.getString("count"));*/
}
reportList.add(report);
}
} catch (JSONException e) {
e.printStackTrace();
}
return reportList;
}
我无法弄清楚,我遇到问题的地方,当我单步执行时,当它到达第二个JSONArray对象时,它会转到catch异常。
答案 0 :(得分:0)
您的JSON
没有名为reportName
的字段。
report.machinereports.add(jsonTwo.getString("reportName"));
将其更改为
report.machinereports.add(jsonTwo.getString("name"));
同样来自@ comeback4you的答案,您对JsonArray
的拨打错误。
JSONArray rList = jsonOne.getJSONArray("machinereports");
应该是
JSONArray rList = reports.getJSONObject(i).getJSONArray("machinereports");
答案 1 :(得分:0)
JSONArray rList = jsonOne.getJSONArray("machinereports");
更改为
JSONArray rList = reports.getJSONObject(i).getJSONArray("machinereports");
并在内部进行循环更改
report.machinereports.add(jsonTwo.getString("name"));