我想要什么:
获取 csv 文件中 JSONObject 的值。
我想这个问题有点接近我想要的,但我无法从 here 得到答案。
我拥有的:
以下 json:
{
"day_entries": [
{
"project_id": "5198193",
"project": "14775",
"user_id": 508343,
"spent_at": "2016-01-27",
"task_id": "2892243",
"task": "Backend Programming",
"client": "Apple",
"id": 420923769,
"notes": "",
"started_at": "12:00pm",
"ended_at": "2:00pm",
"created_at": "2016-01-27T21:30:00Z",
"updated_at": "2016-01-27T21:30:00Z",
"hours_without_timer": 2,
"hours": 2
}
],
"for_day": "2016-01-27"
}
我为此编写的代码是:
/**
* Converts the day_entries JSONObject to csv string values and returns as ArrayList
* @param dayEntries
* @return null if there is any error parsing TimeSheet JSON response
*/
public static ArrayList<String> writeTimeSheetJSONCDR(JSONArray dayEntries) {
try {
ArrayList<String> cdrRows = new ArrayList<String>();
StringBuilder cdrEntry = new StringBuilder();
for (int i = 0; i < dayEntries.length(); i++) {
JSONObject jsonDayEntry = (JSONObject) dayEntries.get(i);
cdrEntry.append(jsonDayEntry.get("for_day")).append(",");
cdrEntry.append(jsonDayEntry.get("project_id"));
cdrEntry.append(",");
cdrEntry.append(jsonDayEntry.get("project"));
cdrEntry.append(",");
cdrEntry.append(jsonDayEntry.get("user_id"));
cdrEntry.append(",");
cdrEntry.append(jsonDayEntry.get("spent_at"));
cdrEntry.append(",");
cdrEntry.append(jsonDayEntry.get("task_id"));
cdrEntry.append(",");
cdrEntry.append(jsonDayEntry.get("task"));
cdrEntry.append(",");
cdrEntry.append(jsonDayEntry.get("client"));
cdrEntry.append(",");
cdrEntry.append(jsonDayEntry.get("id"));
cdrEntry.append(",");
cdrEntry.append(jsonDayEntry.get("notes"));
cdrEntry.append(",");
cdrEntry.append(jsonDayEntry.get("started_at"));
cdrEntry.append(",");
cdrEntry.append(jsonDayEntry.get("ended_at"));
cdrEntry.append(",");
cdrEntry.append(jsonDayEntry.get("created_at"));
cdrEntry.append(",");
cdrEntry.append(jsonDayEntry.get("updated_at"));
cdrEntry.append(",");
cdrEntry.append(jsonDayEntry.get("hours_without_timer"));
cdrEntry.append(",");
cdrEntry.append(jsonDayEntry.get("hours"));
cdrRows.add(cdrEntry.toString());
}
System.out.println("CDREntry: " + cdrEntry.toString());
return cdrRows;
} catch (Exception exp) {
System.err.println("Error parsing json" + exp);
return null;
}
}
我的问题:
有没有一种方法可以将后续子项作为数组获取,而无需单独指定键,并且我不必像我所做的那样提及所有键?
最佳答案
您可以像下面的代码那样执行此操作:
public static ArrayList<String> writeTimeSheetJSONCDR(JSONArray dayEntries) {
try {
ArrayList<String> cdrRows = new ArrayList<String>();
StringBuilder cdrEntry = new StringBuilder();
for (int i = 0; i < dayEntries.length(); i++) {
JSONObject jsonDayEntry = (JSONObject) dayEntries.get(i);
Iterator iterator = jsonDayEntry.keys();
while (iterator.hasNext()){
String key =(String) iterator.next();
cdrEntry.append(jsonDayEntry.get(key)).append(",");
}
cdrRows.add(cdrEntry.toString());
}
System.out.println("CDREntry: " + cdrEntry.toString());
return cdrRows;
} catch (Exception exp) {
System.err.println("Error parsing json" + exp);
return null;
}
}
关于java - 获取 JSONObject 作为数组,以帮助将其转换为 CSV,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42575317/