在JSOn对象中获取JSON数组值并在类对象中使用

时间:2016-08-10 15:18:04

标签: android json class parsing

我正在尝试使用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异常。

2 个答案:

答案 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"));