2014-12-23 20 views
7

muszę analizować wich plik json wygląda następująco:JSON Array Java obiektów

[ 
    { 
    "y": 148, 
    "x": 155 
    }, 
    { 
    "y": 135, 
    "x": 148 
    }, 
    { 
    "y": 148, 
    "x": 154 
    } 
] 

I chcę umieścić te współrzędne x i współrzędne y w produkt JavaObject Click, że klasa wygląda następująco :

public class Click { 
    int x; 
    int y; 


    public Click(int x, int y) { 
     this.x = x; 
     this.y = y; 
    } 

    public int getX() { 
     return x; 
    } 

    public void setX(int x) { 
     this.x = x; 
    } 

    public int getY() { 
     return y; 
    } 

    public void setY(int y) { 
     this.y = y; 
    } 
} 

mam spojrzał na gson bo mówią, że to jest łatwo rzucić ale ja nie rozumiem, jak można to zrobić z mojego pliku.

+0

'[] 'jest tablicą,' {}' jest obiekt. –

Odpowiedz

13

zakładając, że ciąg danych json jest przechowywany w zmienną jsonStr:

String jsonStr = getJsonFromSomewhere(); 
Gson gson = new Gson(); 
Click clicks[] = gson.fromJson(jsonStr, Click[].class); 
0

Inną stałą opcją jest Jackson wydaje się mieć dość solidny samouczek. Nie jestem tego zaznajomiony, więc mam nadzieję, że to pomoże.

Główną ideą jest to, że wykorzystuje mapowania obiektów

ObjectMapper mapper = new ObjectMapper(); 
User user = mapper.readValue(new File("c:\\user.json"), User.class); 

Krok 4 powinien być najlepszym, tylko uświadomić sobie, prawdopodobnie chcesz coś innego niż User.class

EDIT:

Jeśli jesteś całkiem gotowy na używanie Gsona, pomocne może być szukanie innych podobnych odpowiedzi. This question polega na zamianie JSON na POJO (Plain Old Java Objects), a ich kilka jest bardziej pływających w pobliżu. Ponownie, nie jestem bardzo zaznajomiony z tymi i mogę spróbować odpowiedzieć na kilka pytań, ale mam nadzieję, że to dostaniesz tam, gdzie musisz iść.

Szczęśliwe kodowanie! Pozostaw komentarz, jeśli masz jakieś pytania.

+0

Tak, wiem, że Jackson istnieje, ale gson wydaje się bardziej przyjazny dla użytkownika i szybszy w użyciu, ale po prostu go nie dostaję, User.class będzie Click.class, który już wiedziałem, że w gsonie tak daleko, jak się domyślałem – ProblemAnswerQue

+0

dla Aby Jackson działał, musisz mieć również pustego konstruktora dla klasy –

+0

w przykładzie gson, który napisali tak: Gson gson = new Gson(); System.out.println ( gson.fromJson ("{'id': 1," firstName ":" Lokesh "," lastName ":" Gupta "," role ": ['ADMIN', 'MANAGER'] } ", Employee.class)); wyjściowa: urzędnik [id = 1, firstName = Lokesh, lastName = Gupta, role = [ADMIN, MANAGER]] – ProblemAnswerQue

1

Zapoznaj się z interfejsem API Gson i przykładami. Umieściłem linki poniżej!

String jsonString = //your json String 
Gson gson = new Gson(); 
Type typeOfList = new TypeToken<List<Map<String, Integer>>>() {}.getType(); 
List<Map<String, Integer>> list = gson.fromJson(jsonString, typeOfMap); 

List<Click> clicks = new ArrayList<Click>(); 
for(int i = 0; i < list.size(); i++) { 
    int x = list.get(i).get("x"); 
    int y = list.get(i).get("y"); 
    clicks.add(new Click(x, y)); 
} 

(http://google-gson.googlecode.com/svn/trunk/gson/docs/javadocs/com/google/gson/Gson.html) (http://google-gson.googlecode.com/svn/tags/1.5/src/test/java/com/google/gson/functional/MapTest.java)

+0

teraz mam to: "\\ data.json" private static final String filePath = ; BufferedReader br; Gson gson = new Gson(); Kliknij przycisk click = gson.fromJson (br, Click.class); System.out.println (kliknij); ale nadal jest napisane, że mój plik json ma nieprawidłowy obiekt początkowy i końcowy. – ProblemAnswerQue

+0

Nie jestem pewien, jak działa BufferedReader w tej metodzie. Nie wiedziałem, że możesz to zrobić. Być może dlatego otrzymujesz błąd. – haley

+0

Czy utknąłeś na doprowadzeniu jsona do sznurka? – haley