Πώς να διαβάσετε το αρχείο json στη java με απλή βιβλιοθήκη JSON

Θέλω να διαβάσω αυτό το αρχείο JSON με τη java χρησιμοποιώντας την απλή βιβλιοθήκη json.

Το αρχείο μου JSON μοιάζει με αυτό:

[  
    {  
        "name":"John",
        "city":"Berlin",
        "cars":[  
            "audi",
            "bmw"
        ],
        "job":"Teacher"
    },
    {  
        "name":"Mark",
        "city":"Oslo",
        "cars":[  
            "VW",
            "Toyata"
        ],
        "job":"Doctor"
    }
]

Αυτός είναι ο κώδικας java που έγραψα για να διαβάσω αυτό το αρχείο:

package javaapplication1;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.util.Iterator;
import org.json.simple.JSONArray;
import org.json.simple.JSONObject;
import org.json.simple.parser.JSONParser;
import org.json.simple.parser.ParseException;

public class JavaApplication1 {
    public static void main(String[] args) {

        JSONParser parser = new JSONParser();

        try {     
            Object obj = parser.parse(new FileReader("c:\\file.json"));

            JSONObject jsonObject =  (JSONObject) obj;

            String name = (String) jsonObject.get("name");
            System.out.println(name);

            String city = (String) jsonObject.get("city");
            System.out.println(city);

            String job = (String) jsonObject.get("job");
            System.out.println(job);

            // loop array
            JSONArray cars = (JSONArray) jsonObject.get("cars");
            Iterator<String> iterator = cars.iterator();
            while (iterator.hasNext()) {
             System.out.println(iterator.next());
            }
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        } catch (ParseException e) {
            e.printStackTrace();
        }
    }
}

Αλλά λαμβάνω την ακόλουθη εξαίρεση:

Exception in thread "main" java.lang.ClassCastException: JSONArray cannot be cast to org.json.simple.JSONObject at javaapplication1.JavaApplication1.main(JavaApplication1.java:24)

Μπορεί κάποιος να μου πει τι κάνω λάθος; Όλο το αρχείο είναι ένας πίνακας και υπάρχουν αντικείμενα και ένας άλλος πίνακας (αυτοκίνητα) σε όλο τον πίνακα του αρχείου. Αλλά δεν ξέρω πώς μπορώ να αναλύσω ολόκληρο τον πίνακα σε πίνακα java. Ελπίζω ότι κάποιος μπορεί να με βοηθήσει με μια γραμμή κώδικα που μου λείπει στον κώδικά μου.

Ευχαριστώ

Ολόκληρο το αρχείο είναι ένας πίνακας και υπάρχουν αντικείμενα και άλλοι πίνακες (π.χ. αυτοκίνητα) σε ολόκληρο τον πίνακα του αρχείου.

Όπως λέτε, το εξωτερικό στρώμα του JSON blob σας είναι ένας πίνακας. Επομένως, ο αναλυτής σας θα επιστρέψει έναν JSONArray. Στη συνέχεια, μπορείτε να πάρετε JSONObject από τον πίνακα ...

  JSONArray a = (JSONArray) parser.parse(new FileReader("c:\\exer4-courses.json"));

  for (Object o : a)
  {
    JSONObject person = (JSONObject) o;

    String name = (String) person.get("name");
    System.out.println(name);

    String city = (String) person.get("city");
    System.out.println(city);

    String job = (String) person.get("job");
    System.out.println(job);

    JSONArray cars = (JSONArray) person.get("cars");

    for (Object c : cars)
    {
      System.out.println(c+"");
    }
  }

Για αναφορά, δείτε το "Παράδειγμα 1" στη σελίδα json-simple decoding example.

Σχόλια (11)

Μπορείτε να χρησιμοποιήσετε τη βιβλιοθήκη jackson και απλά να χρησιμοποιήσετε αυτές τις 3 γραμμές για να μετατρέψετε το αρχείο json σε Java Object.

ObjectMapper mapper = new ObjectMapper();
InputStream is = Test.class.getResourceAsStream("/test.json");
testObj = mapper.readValue(is, Test.class);
Σχόλια (2)

Μπορείτε να χρησιμοποιήσετε το Gson για αυτό.
Το GSON είναι μια βιβλιοθήκη της Java που μπορεί να χρησιμοποιηθεί για τη μετατροπή αντικειμένων Java στην αναπαράστασή τους JSON. Μπορεί επίσης να χρησιμοποιηθεί για τη μετατροπή μιας συμβολοσειράς JSON σε ένα ισοδύναμο αντικείμενο Java.

Ρίξτε μια ματιά σε αυτό Μετατροπή JSON σε Java.

Σχόλια (1)