2014-12-23 9 views
7

Ho bisogno di analizzare un file JSON wich è simile al seguente:JSON Array di oggetti Java

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

e voglio mettere queste coordinate X e Y coordinate in un JavaObject Click, quella classe assomiglia a questo :

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

ho guardato GSON perché dicono che è facile uscire, ma io non farlo come posso farlo dal mio file.

+0

'[]' è un array, '{}' è un oggetto. –

risposta

13

supponendo che i dati stringa JSON viene memorizzato in variabile chiamata jsonStr:

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

Un'altra opzione solida è Jackson sembra avere un tutorial piuttosto solido. Non ho familiarità con esso, quindi spero che questo aiuti.

L'idea principale è che utilizza un mapper oggetto

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

Fase 4 dovrebbe essere la soluzione migliore, basta rendersi conto che probabilmente si desidera qualcosa di diverso User.class

EDIT:

Se si è abbastanza predisposti a usare Gson, forse sarà utile cercare altre risposte simili. This question riguarda la conversione da JSON a POJO (Plain Old Java Objects) e alcuni sono come se fossero in giro. Ancora una volta, non ho molta familiarità con questi e posso provare a rispondere ad alcune domande, ma spero che questo ti porti dove devi andare.

Felice codifica! Lascia un commento se hai qualche domanda.

+0

sì, so che Jackson esiste ma gson sembra più userfriendly e più veloce nel suo utilizzo ma io proprio non capisco, User.class sarà Click.class, che già conoscevo lo stesso in gson per quanto ho capito – ProblemAnswerQue

+0

per Jackson per funzionare devi anche avere un costruttore vuoto per la tua classe –

+0

nell'esempio di gson lo scrivono così: Gson gson = new Gson(); System.out.println ( gson.fromJson ("{'id': 1, 'firstName': 'Lokesh', 'lastName': 'Gupta', 'ruoli': ['ADMIN', 'MANAGER'] } ", Employee.class)); uscita: Employee [ID = 1, firstName = Lokesh, lastName = Gupta, ruoli = [ADMIN, MANAGER]] – ProblemAnswerQue

1

Controlla l'API di Gson e alcuni esempi. Ho messo i link qui sotto!

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

ora ho questo: "\\ data.json" private static final String filePath = ; BufferedReader br; Gson gson = new Gson(); Fare clic clic = gson.fromJson (br, Click.class); System.out.println (clic); ma continua a dire che il mio file json ha un oggetto di inizio e fine errato – ProblemAnswerQue

+0

Non sono sicuro di come BufferedReader funzioni con quel metodo. Non sapevo che potessi farlo. Questo potrebbe essere il motivo per cui stai ricevendo l'errore. – haley

+0

Sei bloccato a mettere il json in una stringa? – haley