Domanda

Sono stato stringendo intorno Google cercando di capire questo fuori, ma io non riesco a farlo. Ho la seguente stringa JSON che viene restituita alla mia applet java da un'altra fonte che ho bisogno di interagire con.

{
 "A01": {"Status": "Ready", "Time": "00:00"}, 
 "A02": {"Status": "Ready", "Time": "00:00"}, 
 ......
}

Al momento io non sono sicuro di come dovrei usare GSON per analizzare che nel mio applet. Quando ho parlato con i progettisti di quel programma. La stringa JSON è stato progettato per l'utilizzo in PHP non java così quando ho decodificato in php che mi ha dato un allineamento assoc buon multi-dimensionale.

Tutti i suggerimenti su questo.

È stato utile?

Soluzione

Un array associativo in PHP traduce in un Map in Java. Così, agli occhi di GSON, il tuo JSON è in formato di Map<String, Event> in cui la classe ha la Event status campi e time.

public class Event {
    private String Status;
    private String Time;

    // Add/generate getters, setters and other boilerplate.
}

Sì, i nomi dei campi capitalizzati sono brutto, ma è così che il tuo look come JSON. Altrimenti sarà necessario creare un personalizzato GSON deserializzatore .

Ecco come è possibile convertirlo.

Map<String, Event> events = new Gson().fromJson(json, new TypeToken<Map<String, Event>>(){}.getType());

A01, A02, ecc diventano chiavi Map e il suo valore diventa il valore Event di Map. Si consiglia di aggiungere un altro deserializzatore personalizzato per ottenere il Time in un java.util.Date.

Come diversa alternativa, è anche possibile utilizzare al posto Map<String, Map<String, String>>.

Altri suggerimenti

Tale nesso mi indicò qualcosa che non era nemmeno guardando. Ho anche dimenticato di dire nel mio post che Conoscendo l'A01, A02, ecc è molto importante. Ma un link nel post che mi ha segnalato mi portano a venire con questo, che funziona per me.

JsonParser parse = new JsonParser();
JsonObject jobj = (JsonObject)parse.parse(status);                            
Set<Map.Entry<String, JsonElement>> map = jobj.entrySet();
Iterator<Map.Entry<String, JsonElement>> iterator = map.iterator();
int size = map.size();
for( int k = 0; k < size; k++ )
{
    Map.Entry<String, JsonElement> entry = iterator.next();
    String key = entry .getKey();
    JsonObject jele = (JsonObject)entry.getValue();
}

Se il JSON era leggermente diverso, come di seguito:

{
 [
  {"Status": "Ready", "Time": "00:00"}, 
  {"Status": "Ready", "Time": "00:00"}, 
  ......
 ]
}

GSON sarebbe in grado di convertire il JSON in una collezione di oggetti, l'oggetto si dovrà definire se stessi. Così si avrebbe bisogno:

public class myAClass {
public String Status;
public Double time; //this could be a string/or even a Date I guess, 
                    //not sure what data you are expecting
                    //and the colon may cause a problem if parsed as a double
}

e quindi utilizzare tale in questo modo:

Type listType = new TypeToken<List<myAClass>>() {}.getType();
List<myAClass> myAClassList = new Gson().fromJson(json, listType); 
//where json is yr json string

Si potrebbe quindi utilizzare l'elenco di oggetti come richiedono.

(ulteriori letture su qui )

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top