Java 包含多个数组的JSON对象

Java 包含多个数组的JSON对象,java,android,arrays,json,Java,Android,Arrays,Json,我有一个包含json数组的json对象。下面是json对象 { "dataset": { "id": 11304240, "dataset_code": "teste", "database_code": "LBMA", "name": "testse: London Fixing", "description": "test", "refreshed_at": "2017-03-17T16:50:32.330Z", "newest_ava

我有一个包含json数组的json对象。下面是json对象

{
"dataset": {
    "id": 11304240,
    "dataset_code": "teste",
    "database_code": "LBMA",
    "name": "testse: London Fixing",
    "description": "test",
    "refreshed_at": "2017-03-17T16:50:32.330Z",
    "newest_available_date": "2017-03-17",
    "oldest_available_date": "1968-01-02",
    "column_names": ["Date", "USD (AM)", "USD (PM)", "GBP (AM)", "GBP (PM)", "EURO (AM)", "EURO (PM)"],
    "frequency": "daily",
    "type": "Time Series",
    "premium": false,
    "limit": 1,
    "transform": null,
    "column_index": null,
    "start_date": "1968-01-02",
    "end_date": "2017-03-17",
    "data": [
        ["2017-03-17", 1228.75, 1229.6, 991.85, 994.25, 1140.53, 1144.27]
        ["2017-03-16", 1228.79, 1228.6, 992.85, 994.25, 1140.53, 1144.27]
    ],
    "collapse": null,
    "order": null,
    "database_id": 139
}
}
我需要将数据数组的第一行提取为不同的字符串和双变量

到目前为止,这是我的解决方案。我没有收到任何数据信息

  try {
                JSONObject jsonObj = new JSONObject(jsonStr);


                // Getting JSON Array node
                JSONArray data = jsonObj.getJSONArray("data");
                //JSONObject contacts = jsonArray.getJSONArray("contacts");

                // looping through All Contacts


                    JSONArray js=data.getJSONArray(0);

                    for (int i = 0; i <js.length(); i++) {

                    JSONObject c = js.getJSONObject(i);

                    String id = c.getString("date");
                    String name = c.getString("USD (AM)");
                    String email = c.getString("USD (Pm)");

                    // tmp hash map for single contact
                    HashMap<String, String> contact = new HashMap<>();

                    // adding each child node to HashMap key => value
                    contact.put("date", date);
                    contact.put("USD (AM)", am);
                    contact.put("USD (PM)", pm);


                    // adding contact to contact list
                    contactList.add(contact);
                }

首先,您可能需要一个类来处理您的变量,正如您的业务模型所要求的那样

比如:

public class DataVo {
   private Date date;
   private Double am;
   private Double pm;

  // getters/setters
}
您可以创建自己的服务来接收字符串,并使用显示的代码将其解析为DataVo列表


或者,您可以使用库,如创建自定义序列化程序/反序列化程序来解决您的数据转换问题。

谢谢@AJB和@cleiton it now working.)

JSONObject jsonObj=新的JSONObject(jsonStr);
JSONObject dataset=jsonObj.getJSONObject(“数据集”);
//获取JSON数组节点
JSONArray data=dataset.getJSONArray(“数据”);
//JSONObject contacts=jsonArray.getJSONArray(“contacts”);
//通过所有触点循环
JSONArray js=data.getJSONArray(0);
字符串日期=js.getString(0);
字符串am=js.getString(1);
字符串pm=js.getString(2);
HashMap contact=新的HashMap();
//将每个子节点添加到HashMap key=>value
联系人:put(“日期”,日期);
联系人:put(“美元(上午)”,上午;
联系人:put(“美元(下午)”,下午;
联系人列表。添加(联系人);

创建一个对象来存储所需的变量

你不需要进入
数据集
才能进入
数据集
?我必须先进入吗?是的,我想是的。您给它的对象只有一个字段“dataset”。该字段的值是包含所有其他字段的嵌套对象。但是我认为
jsonObject
方法只会查看您提供给它的对象中的字段。它们不深入搜索嵌套字段。@ajb'JSONArray js=data.getJSONArray(0);'我来到这里。首先是数据集对象,然后是数据数组,然后从这里开始js是第一行。现在,我该怎么做呢?
js.getString(0)
js.getDouble(1)
,等等。假设我正在查看javadoc以获得正确的类。谢谢,我将尝试此类。欢迎其他人使用更多解决方案。类似的答案需要更多解释和/或示例。对不起,我想你已经知道如何创建对象了
public class DataVo {
   private Date date;
   private Double am;
   private Double pm;

  // getters/setters
}
JSONObject jsonObj = new JSONObject(jsonStr);

                JSONObject dataset = jsonObj.getJSONObject("dataset");

                // Getting JSON Array node
                JSONArray data = dataset.getJSONArray("data");
                //JSONObject contacts = jsonArray.getJSONArray("contacts");

                // looping through All Contacts


                    JSONArray js=data.getJSONArray(0);

                    String date = js.getString(0);
                    String am = js.getString(1);
                    String pm =js.getString(2);


                HashMap<String, String> contact = new HashMap<>();

                // adding each child node to HashMap key => value
                contact.put("date", date);
                contact.put("USD (AM)", am);
                contact.put("USD (PM)", pm);

                contactList.add(contact);