Java 包含多个数组的JSON对象
我有一个包含json数组的json对象。下面是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
{
"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);