2016-05-02 12 views
1

У меня есть ArrayList студентов, я хочу создать массив json из этого массива. Я видел примеры с ArrayList, но они не работают в моем случае.Java ArrayList <Class> to JSONArray

Мой студент Класс имеет:

String name, lastname; 
ArrayList<String> courses; 

Что я пробовал:

JSONObject jsonObject = new JSONObject(); 
    JSONArray jsonPlayerArray = new JSONArray(Arrays.asList(students)); 
    jsonObject.put("jsonPlayerArray",jsonPlayerArray); 
    System.out.println("AARRRAAYY: " + jsonPlayerArray.toString()); 
    System.out.println("JSONOBJEEECCCTTT: " + jsonObject.toString()); 

Результаты:

AARRRAAYY: [[null,null,null,null]] 
JSONOBJEEECCCTTT: {"jsonPlayerArray":[[null,null,null,null]]} 

Идея, может быть, петля, хотя мой массив и добавить их по отдельности

Обновление с тестового примера

Вызов методу

Test test = new Test(); 
test.addData(); 

класса с функцией

public class Test { 
    ArrayList<Student> students = new ArrayList<>(); 
    ArrayList<String> courseSet = new ArrayList<>(); 

    public void addData(){ 
     courseSet.add("Java"); 
     courseSet.add("CSS"); 
     courseSet.add("Math"); 
     courseSet.add("Physics"); 

     students.add(new Student("Jimmy","sad", courseSet)); 
     students.add(new Student("Kim","don", courseSet)); 
     students.add(new Student("Barack","Obama", courseSet)); 
     createJSON(); 
    } 

    public void createJSON(){ 
     try { 
      List<Student> playerList = students; 

      JSONObject jsonplayerObject = new JSONObject(); 
      JSONArray jsonPlayerArray = new JSONArray(playerList); 
      jsonplayerObject.put("jsonPlayerArray", jsonPlayerArray); 
      System.out.println("AARRRAAYY: " + jsonplayerObject.toString()); 


      for (Student s : students) { 
       JSONArray jsArray = new JSONArray(s.getCourses()); 
       JSONObject jsonObject = new JSONObject(); 
       jsonObject.put("name", s.getName()); 
       jsonObject.put("lastName", s.getLastname()); 
       jsonObject.put("courses", jsArray); 
       System.out.println("Json for player class: " + jsonObject.toString()); 
      } 


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

} 

Студент Класс:

public class Student { 

    String name, lastname; 
    ArrayList<String> courses; 

    public Student(String name, String lastname, ArrayList<String> courses) { 
     this.name = name; 
     this.lastname = lastname; 
     this.courses = courses; 
    } 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String getLastname() { 
     return lastname; 
    } 

    public void setLastname(String lastname) { 
     this.lastname = lastname; 
    } 

    public ArrayList<String> getCourses() { 
     return courses; 
    } 

    public void setCourses(ArrayList<String> courses) { 
     this.courses = courses; 
    } 
} 

Результаты:

AARRRAAYY: {"jsonPlayerArray":[null,null,null]} 
Json for player class: {"name":"Jimmy","lastName":"sad","courses":["Java","CSS","Math","Physics"]} 
Json for player class: {"name":"Kim","lastName":"don","courses":["Java","CSS","Math","Physics"]} 
Json for player class: {"name":"Barack","lastName":"Obama","courses":["Java","CSS","Math","Physics"]} 
+0

Ваш 'ArrayList' содержит только значения« null », конечно, это результат, который вы получите. Голосование закрывается как невоспроизводимое. –

+0

На самом деле у меня есть значения, и теперь он работает, после того как я зациклился на массив учеников и добавил их вручную (см. Обновление). Не уверен, что формат правильный. Я имею в виду, что каждый ученик помещает JSONObject, а затем в следующий цикл переопределяет предыдущий ученик. Вопрос в том, является ли это наилучшим решением? – CookieMonster

+0

Затем вы показали нам неправильный код для начала или неправильный результат. Если 'students' не содержит 5 значений« null », то представленный вами вывод невозможен. Измените свой вопрос, чтобы отразить ваш фактический код. –

ответ

0
public JsonArray createJsonArrayStudentList(List<Student> list) { 
     JsonArray jsonArray = Json.createArrayBuilder(); 
     for(Student student: list) { 
      jsonArray.add(Json.createObjectBuilder() 
       .add("firstname", student.getFirstName()) 
       .add("lastname", student.getLastName())); 
     } 
     jsonArray.build(); 
     return jsonArray; 
    } 
+0

Приятно, но вы не включаете arraylist курсов в массив учеников – CookieMonster

+0

Вы используете совершенно другую библиотеку JSON. –

+0

Также, рассматривая 'null' в своем JSON, вы, например, произвели бы' NullPointerException', как только вы попытаетесь разыскать «ученик» на первой итерации вашего цикла. –

-1

Вы должны попытаться с помощью Gson сначала добавьте его в своих зависимостей

compile 'com.google.code.gson:gson:2.4' 

и попробовать этот

String json = new Gson().toJson(courses); 
+0

Какая разница? –