简体   繁体   中英

Java ArrayList<Class> to JSONArray

I have a ArrayList of students, I want to create a json array from this array. I have seen examples done with ArrayList, but those dont work in my case.

My Student Class has:

String name, lastname;
ArrayList<String> courses;

What I tried:

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

Results:

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

Idea is to maybe loop though my array and add them individually

Update with test example

Call to method

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

Class with function

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

}

Student Class:

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

Results:

    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"]}
 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;
    }

You should try by using Gson first add it in your dependencies

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

and try this

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

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM