2017-08-07 3 views
-2

Json:Konvertieren von Json in CSV in 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" 
    } 
] 

Code:

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(); 
     } 

Lassen Sie mich wissen, was in dem obigen Code fehle.

ja, ich habe in die Schleife hinzugefügt. Folgender Fehler wird erhalten Fehler: Die Methode toString (JSONArray) im Typ CDL ist nicht anwendbar für die Argumente (JsonObject) FileUtils kann nicht aufgelöst werden

Erwartete Ausgabe: -------------- ------- Sprachportal, 2017-03-14 14:14:46 +0000 Sprachportal-1,2017-03-14 14:14:46 +0000 Sprachportal-2,2017-03-14 14 : 14: 46 +0000

+0

Bitte bearbeiten Sie Ihre Frage mit den Fehlern –

+1

'obj' ist nicht im Rahmen ... Es ist nur * innerhalb * der Schleife definiert –

+0

ja, ich habe in die Schleife hinzugefügt. Nach Störung erhalten Fehler: Die Methode toString (JSONArray) in der Art CDL ist nicht anwendbar für die Argumente (JsonObject) \t FileUtils nicht – user3214361

Antwort

0

Die Dokumentation (https://sling.apache.org/apidocs/sling5/org/apache/sling/commons/json/util/CDL.html) besagt, dass die Methode toString() der Klasse CDL einen org.apache.sling.commons.json.JSONArray als Parameter erwartet. Sie verwenden jedoch die Methode readArray() von javax.json.JsonReader, die javax.json.JsonArray zurückgibt.

Und sowieso haben Sie bereits name und startTime als Strings. Es geht nur darum, ihnen das gewünschte Format zu geben. Sie könnten dies zum Beispiel versuchen, die CSV-Zeichenfolge zu erstellen.

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

Notiere die writeStringToFile() -Leitung ist außerhalb der Schleife.