2013-03-11 2 views
3

Я хочу хранить большие данные массива JSON в CSV-файле. Как я могу это сделать?Как сохранить многомерный массив JSON в CSV-файл на Android?

У меня есть следующий код, который не сохраняет данные в файл "test1.csv", созданный в моей "тестовой" папке Android.

Вот код.

JSONArray outerArray = [{"value":true,"Id":0,"name":"214"}, {"value":true,"Id":0,"name":"215"},{"value":true,"Id":0,"name":"216"}] 

public void saveCsv(JSONArray outerArray) throws IOException, JSONException { 
    String rootPath = Environment.getExternalStorageDirectory() 
      .getAbsolutePath() + "/test/"; 
    File dir = new File(rootPath); 
    if (!dir.exists()) { 
     dir.mkdir(); 
    } 
    File file; 
    EditText editText = (EditText) findViewById(R.id.editText1); 
    if (!editText.getText().toString().equals("")) { 
     file = new File(rootPath, editText.getText().toString() + ".csv"); 
    } else { 
     editText.setError("Defualt csv file name will be used"); 
     Toast.makeText(this, "CSV name is empty", 5000).show(); 
     file = new File(rootPath, "test1.csv"); 
    } 
    file.createNewFile(); 
    if (file.exists()) { 
     CSVWriter writer = new CSVWriter(new FileWriter(file), ','); 
     String[][] arrayOfArrays = new String[outerArray.length()][]; 
     for (int i = 0; i < outerArray.length(); i++) { 
      JSONObject innerJsonArray = (JSONObject) outerArray.get(i); 
      String[] stringArray1 = new String[innerJsonArray.length()]; 
      for (int j = 0; j < innerJsonArray.length(); j++) { 
       stringArray1[j] = (String) innerJsonArray.get("value"); 
      } 
      arrayOfArrays[i] = stringArray1; 
      writer.writeNext(arrayOfArrays[i]); 
     } 
     writer.close(); 
    } 
} 
+0

http://stackoverflow.com/questions/9561749/create-csv-fie-in-android-app видеть эту ссылку @swapnil – Venkat

+0

@Venkat да у меня есть –

ответ

5

Я использовал opencsv-2.3.jar отсюда http://sourceforge.net/projects/opencsv/. Документально здесь http://sourceforge.net/projects/opencsv/

Я следующий JSON с булевыми значениями, которые кидает логическое наклоненное бросание значению строки

JSONArray outerArray = [{"value":true,"Id":0,"name":"214"}, {"value":true,"Id":0,"name":"215"},{"value":true,"Id":0,"name":"216"}] 

я изменил json.get() для json.getString(). Следующий код работает отлично теперь :)

public void saveCsv(JSONArray outerArray) throws IOException, JSONException { 
    String rootPath = Environment.getExternalStorageDirectory() 
      .getAbsolutePath() + "/test/"; 
    File dir = new File(rootPath); 
    if (!dir.exists()) { 
     dir.mkdir(); 
    } 
    File file; 
    EditText editText = (EditText) findViewById(R.id.editText1); 
    if (!editText.getText().toString().equals("")) { 
     file = new File(rootPath, editText.getText().toString() + ".csv"); 
    } else { 
     editText.setError("Defualt csv file name will be used"); 
     Toast.makeText(this, "CSV name is empty", 5000).show(); 
     file = new File(rootPath, "test1.csv"); 
    } 
    if(!file.exists()){ 
     file.createNewFile(); 
    }  
    if (file.exists()) { 
     CSVWriter writer = new CSVWriter(new FileWriter(file), ','); 
     String[][] arrayOfArrays = new String[outerArray.length()][]; 
     for (int i = 0; i < outerArray.length(); i++) { 
      JSONObject innerJsonArray = (JSONObject) outerArray.get(i); 
      String[] stringArray1 = new String[innerJsonArray.length()]; 

      stringArray1[0]= (String) innerJsonArray.getString("Id"); 
      stringArray1[1]= (String) innerJsonArray.getString("value"); 
      stringArray1[2]= (String) innerJsonArray.getString("name"); 
      arrayOfArrays[i] = stringArray1; 
      writer.writeNext(arrayOfArrays[i]); 
     } 
     writer.close(); 
    } 
} 
Смежные вопросы