Question

Je suis pinçant autour de Google en essayant de comprendre cela, mais je ne peux pas sembler le faire. J'ai la chaîne JSON suivante qui est retourné à mon applet java à partir d'une autre source que j'ai besoin d'interagir avec.

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

En ce moment, je ne sais pas comment je devrais utiliser Gson pour analyser que dans mon applet. Quand je parlais aux concepteurs de ce programme. La chaîne JSON a été conçu pour être utilisé en php pas java alors quand je l'ai décodés php il m'a donné un bon éventail de assoc multidimensionnel.

Toutes les suggestions sur ce sujet.

Était-ce utile?

La solution

Un tableau associatif en PHP se traduit par une Map en Java. Ainsi, dans les yeux de Gson, votre JSON est au format de Map<String, Event> où la classe a Event les champs status et time.

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

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

Oui, les noms de champs en majuscules sont laids, mais qui est comment votre look JSON comme. Vous auriez besoin autrement de créer un Gson custom désérialiseur .

Voici comment vous pouvez le convertir.

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

A01, A02, etc deviennent des touches Map et sa valeur devient la valeur Event de Map. Vous pouvez ajouter un autre désérialiseur personnalisé pour obtenir le Time dans un java.util.Date.

une autre alternative, vous pouvez également utiliser Map<String, Map<String, String>> à la place.

Autres conseils

Ce lien m'a fait quelque chose que je ne cherchais pas même à. J'ai oublié de mentionner aussi dans mon post que la connaissance de l'A01, A02, etc est très important. Mais un lien dans le message que vous me fait me conduire à trouver ce qui fonctionne pour moi.

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

Si votre JSON était légèrement différente, comme ci-dessous:

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

Gson serait en mesure de convertir le JSON dans une collection d'objets, l'objet que vous auriez à vous définir. Donc, vous devez:

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
}

Et puis utilisez que comme ceci:

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

Vous pouvez ensuite utiliser la liste des objets que vous avez besoin.

(aller plus loin sur )

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top