java - 获取 JSONObject 作为数组,以帮助将其转换为 CSV

标签 java json csv

我想要什么:

获取 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/

相关文章:

javascript - 我可以将这些数据转换为json并使用表单POST而不是ajax发送吗

java - 包含 ImageIcon 的 JLabel 不会重新绘制

java - 为什么字符串数组不将字符串作为第一个索引

ios - Firebase 嵌套解析 Swift

python - 将 dask 数据帧写入一个文件

python - 数据框中的替换功能删除的内容超出预期

python - 列出 csv 文件中的元素类型

java - Android 的 FusedLocationApi 不会激活 GPS 并返回非常旧的日期

java - 使用 JSONObject 调用改造。

json - 在 Go 中解码复杂的 json