преобразовать формат csv в Json в Android

Пример преобразования формата csv в Json в Android. Я нашел решение в разделе Преобразование файла CSV в JSON object в Java, но не работает или я что-то упускаю.

Заранее спасибо.

  package com.example.readfilefromsdcard;

 import java.io.File;
 import java.io.FileInputStream;
 import java.io.FileReader;
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.io.Reader;
 import java.util.List;

 import org.codehaus.jackson.map.ObjectMapper;

 import com.opencsv.bean.ColumnPositionMappingStrategy;
 import com.opencsv.bean.CsvToBean;
 import com.opencsv.bean.HeaderColumnNameMappingStrategy;
 import android.app.Activity;
 import android.os.Bundle;
 import android.view.View;
 import android.view.View.OnClickListener;
 import android.widget.Button;
 import android.widget.Toast;

  public class MainActivity extends Activity {

Button btnWriteSDFile;
Button btnReadSDFile;
String path = "/sdcard/mydocs/test.csv";


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    btnReadSDFile = (Button) findViewById(R.id.btnReadSDFile);
    btnReadSDFile.setOnClickListener(new OnClickListener() {

        public void onClick(View v) {
            try {
                 ConvertCsvToJson(path,"TestJavaBeans");
                // ConvertCsvToJson1(path);
            } catch (Exception e) {
                Toast.makeText(getBaseContext(), e.getMessage(), Toast.LENGTH_SHORT).show();
            }
        }
    });
}

public void ConvertCsvToJson(String path, String clsName) throws IOException, ClassNotFoundException {

    String pathToCsvFile = path;
    String javaBeanClassName = "" + clsName;
    final File file = new File(pathToCsvFile);
    if (!file.exists()) {
        System.out.println("The file you specified does not exist. path=" + pathToCsvFile);
    }
    Class<?> type = null;
    try {
        type = Class.forName(javaBeanClassName);
    } catch (ClassNotFoundException e) {
        System.out.println("The java bean you specified does not exist. className=" + javaBeanClassName);
    }

    HeaderColumnNameMappingStrategy<TestJavaBeans> strat = new HeaderColumnNameMappingStrategy<TestJavaBeans>();
    //strat.setType(type);
    CsvToBean<TestJavaBeans> csv = new CsvToBean<TestJavaBeans>();
    List<TestJavaBeans> list = csv.parse(strat, new InputStreamReader(new FileInputStream(file)));
    System.out.println(new ObjectMapper().writeValueAsString(list));

}

public void ConvertCsvToJson1(String path) throws IOException, ClassNotFoundException {

    final ColumnPositionMappingStrategy<TestJavaBeans > strategy = new ColumnPositionMappingStrategy<TestJavaBeans>();
    strategy.setType(TestJavaBeans .class);
    strategy.setColumnMapping(new String[] { "name", "id", });
    final CsvToBean<TestJavaBeans > csvToBean = new CsvToBean<TestJavaBeans >();
    final List<TestJavaBeans > beanExamples;
    try {
        final Reader reader = new FileReader(path);
        beanExamples = csvToBean.parse(strategy, reader);
        System.out.println(new       ObjectMapper().writeValueAsString(beanExamples));
    } catch (IOException ex) {
        throw new RuntimeException(ex);
    }
}

}

  package com.example.readfilefromsdcard;

 public class TestJavaBeans {
       private String name;
       private String id;
       public String getName() {
         return name;
}
public void setName(String name) {
    this.name = name;
}
public String getId() {
    return id;
}
public void setId(String id) {
    this.id = id;
}

}

Библиотеки, на которые ссылаются: jackson-all-1.9.0.jar и opencsv-3.3.jar.

log: не удалось найти метод java.beans.Introspector.getBeanInfo, на который ссылается метод com.opencsv.bean.HeaderColumnNameMappingStrategy.loadDescriptors


person Bhola Nath Mahto    schedule 28.05.2015    source источник
comment
нам нужно увидеть ваш код, чтобы определить наличие проблемы. разместите свой код   -  person Sachu    schedule 28.05.2015
comment
Я добавил все используемые коды и библиотеки. если вам нужно больше информации, чем скажите мне   -  person Bhola Nath Mahto    schedule 28.05.2015


Ответы (3)


На самом деле универсального «конверта» не существует: JSON — это иерархическая структура, а CSV — плоская. Вам необходимо смоделировать объект JSON и сопоставить поля из CSV с объектом JSON по одному. Это больше логическая проблема, чем проблема кодирования.

person Endareth    schedule 28.05.2015
comment
Я использую jackson-all-1.9.0.jar и opencsv-3.3.jar для отображения и преобразования. - person Bhola Nath Mahto; 28.05.2015

Я бы предложил этот подход

создайте класс-оболочку Java, который имеет переменную класса List<TestJavaBeans> list

Затем используйте Джексона, чтобы преобразовать эту «оболочку» в json.

person Hector    schedule 28.05.2015

Ссылка, которую я предпочел для преобразования csv в json, выглядит следующим образом:

https://github.com/cparker15/csv-to-json?files=1

person Rajan Bhavsar    schedule 28.05.2015
comment
Вы помечаете как Android, и теперь вы сказали мне, что вам нужна Java, пожалуйста, решите, каковы ваши требования. - person Rajan Bhavsar; 28.05.2015
comment
извините за это, но мне нужен собственный Android с использованием java. - person Bhola Nath Mahto; 28.05.2015