【问题标题】:Converting Json to CSV in JAVA在 JAVA 中将 Json 转换为 CSV
【发布时间】:2017-08-07 02:37:52
【问题描述】:

Json:

[  
   {  
      "to_name":"Voice Portal",
      "start_time":"2017-03-14 14:14:46 +0000"
   },
   {  
      "to_name":"Voice Portal-1",
      "start_time":"2017-03-14 14:14:46 +0000"
   },
   {  
      "to_name":"Voice Portal-2",
      "start_time":"2017-03-14 14:14:46 +0000"
   }
]

代码:

File jsonInputFile = new File("D:\\Java-CallLog\\src\\EdgeNode\\Calllog.json");
        InputStream is;
        try {               
            is = new FileInputStream(jsonInputFile);

            // Create JsonReader from Json.
            JsonReader reader = Json.createReader(is);
            // Get the JsonObject structure from JsonReader.
            JsonArray callLogArray = reader.readArray();
            reader.close();
            System.out.println(callLogArray.size());

            String csv = null;
            File file=new File("D:\\Java-CallLog\\src\\EdgeNode\\Calllog.csv");
            for (int i = 0; i<callLogArray.size(); i++){
                JsonObject obj = callLogArray.getJsonObject(i);                 
                String name = obj.getString("to_name");
                String startTime = obj.getString("start_time");
                System.out.println(name);      

                 csv = CDL.toString(obj);                   
                FileUtils.writeStringToFile(file, csv);
            }           

        } catch (FileNotFoundException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

让我知道上面代码中缺少什么。

是的,我已添加到循环中。以下错误出现错误:CDL 类型中的方法 toString(JSONArray) 不适用于参数 (JsonObject) FileUtils 无法解析

预期输出:--------- Voice Portal, 2017-03-14 14:14:46 +0000 Voice Portal-1,2017-03 -14 14:14:46 +0000 语音传送门-2,2017-03-14 14:14:46 +0000

【问题讨论】:

  • 请编辑您的问题以包含错误
  • obj 不在范围内...它只定义在循环中
  • 是的,我已添加到循环中。以下错误出现错误:CDL 类型中的方法 toString(JSONArray) 不适用于参数 (JsonObject) FileUtils 无法解析
  • - 预期输出:---------Voice Portal, 2017-03-14 14:14:46 +0000 Voice Portal-1,2017-03-14 14:14:46 +0000 Voice Portal-2,2017-03-14 14:14:46 +0000
  • 如果你已经添加到循环中,那么edit问题代码正确

标签: java arrays json csv


【解决方案1】:

文档 (https://sling.apache.org/apidocs/sling5/org/apache/sling/commons/json/util/CDL.html) 说 CDL 类的 toString() 方法需要一个 org.apache.sling.commons.json.JSONArray 作为参数。但是您使用的是 javax.json.JsonReader 的 readArray() 方法,该方法返回 javax.json.JsonArray。

无论如何,您已经将 name 和 startTime 作为字符串。这只是给他们所需的格式的问题。例如,您可以尝试这个来构建 csv 字符串。

StringBuilder sb = new StringBuilder();
for(...){
    ...
    sb.append(name).append(",").append(startTime).append(" ");
}   
csv = sb.toString();
FileUtils.writeStringToFile(file, csv);

注意 writeStringToFile() 行在循环之外。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-11-02
    • 2013-03-12
    • 2020-05-14
    • 1970-01-01
    • 2014-10-04
    • 2017-11-30
    • 1970-01-01
    • 2014-06-04
    相关资源
    最近更新 更多