I’m trying to read a JSON file into a data structure so that I can count a bunch of elements.
The JSON file is of the format [{String, String, [], String } ... ]. Now in this array of objects, I need to find the relationship of the first string field (let’s say association) to the array field (names of the members). I need to figure out how many associations each of these members belong to.
I’m currently using json-simple and this is how I’ve done it.
Object obj = parser.parse(new FileReader("c://Users/James McNulty/Documents/School/CMPT 470/Ex 4/exer4-courses.json"));
JSONArray jsonArray = (JSONArray) obj;
ArrayList<JSONObject> courseInfo = new ArrayList<JSONObject>();
Iterator<JSONObject> jsonIterator = jsonArray.iterator();
while (jsonIterator.hasNext()) {
courseInfo.add(jsonIterator.next());
count++;
//System.out.println(jsonIterator.next());
}
//System.out.println(count);
String course = "";
String student = "";
ArrayList<JSONArray> studentsPerCourse = new ArrayList<JSONArray>();
for (int i=0; i<count; i++) {
course = (String) courseInfo.get(i).get("course");
studentsPerCourse.add((JSONArray) courseInfo.get(i).get("students"));
System.out.println(course);
System.out.println(studentsPerCourse.get(i));
}
ArrayList<String> students = new ArrayList<String>();
for (int i=0; i<count; i++) {
for (int j=0; j< (studentsPerCourse.get(i).size()); j++) {
students.add((String) studentsPerCourse.get(i).get(j));
//System.out.println(studentsPerCourse.get(i).get(j));
}
//System.out.println(student);
}
JSONObject object = new JSONObject();
Map<String, Integer> studentCourses = new HashMap<String, Integer>();
Set<String> unique = new HashSet<String>(students);
for (String key : unique) {
studentCourses.put(key, Collections.frequency(students, key));
object.put(key, Collections.frequency(students, key));
//System.out.println(key + ": " + Collections.frequency(students, key));
}
FileWriter file = new FileWriter("c://Users/James McNulty/Documents/School/CMPT 470/Ex 4/output.json");
file.write(object.toJSONString());
file.flush();
file.close();
System.out.print(object);
Wondering if there is a simpler way in simple-json itself or if there are other libraries that better.
Google gson is very simple to use both for encoding and decoding.
The simplest way is to fill an object by simply letting the engine fill the fields using reflection to map them to the content of the file as described here : the deserialization is just the call to
gson.fromJson(json, MyClass.class);once you created your class.