2017-08-07 83 views
-2

Json的轉換JSON來CSV:在JAVA

[ 
    { 
     "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無法解析

預期輸出:-------------- -------語音門戶,2017-03-14 14:14:46 +0000語音門戶-2017-03-14 14:14:46 +0000語音門戶-2,2017-03-14 14 :14:46 +0000

+0

請修改您的問題以包含錯誤 –

+1

'obj'不在範圍內......它僅在*循環內定義* –

+0

是的,我已將其添加到循環中。下面的錯誤我得到 錯誤: 在類型CDL toString方法(JSONArray),其中不適用的參數(的JSONObject) \t文件實用程序不能得到解決 – user3214361

回答

0

該文檔(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。

無論如何,你已經有了名字和startTime作爲字符串。這只是給他們所需格式的問題。你可以嘗試這個例子來構建csv字符串。

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

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