Comment obtenir une valeur de gson objet par clé
J'ai essayé de suivre cette solution Comment trouver le nom spécifié et sa valeur en JSON-chaîne à partir de Java?
Toutefois, il ne semble pas faire sens.
Je définir un nouveau gson objet à partir d'une chaîne:
Exemple de chaîne ici: http://api.soundrop.fm/spaces/XJTt3mXTOZpvgmOc
public void convertToJson()
{
Gson gson = new Gson();
Object gsonContent = gson.fromJson( stringContent, RadioContent.class );
}
Et puis essayer de retourner une valeur:
public Object getValue( String find )
{
return gsonContent.find;
}
Enfin son nom avec:
public static void print( String find = "title" )
{
Object value = radioContent.getValue( find );
System.out.println( value );
}
Cependant j'obtiens une erreur:
java: cannot find symbol
symbol: variable find
location: variable gsonContent of type java.lang.Object
Complète des classes:
Classe principale: http://pastebin.com/v4LrZm6k
Radio de classe: http://pastebin.com/2BWwb6eD
- Tout d'abord obtenu à json.org et l'étude de la syntaxe JSON. Il existe deux types de JSON structures, des "objets" et des "tableaux". Tout est construit par la superposition de ces. Des "objets" vous accédez à l'aide des touches, tandis que des "tableaux" sont accessibles avec un index numérique. En fonction de la boîte à outils que vous utilisez le "désérialisé" JSON sera représenté plain old Java Cartes ("objets") et les Listes ("tableaux") ou de la Carte/Liste des classes comme appartenant à l'JSON kit que vous utilisez. (Il est important de noter que le JSON "objet" n'est pas le même que le Java "Objet".)
- Essentiellement, tout ce que je veux faire est d'obtenir la valeur d'une clé. Donc je suppose que les objets sont ce que je dois travailler avec.
- Parser le JSON comme un
JsonObject
et de récupérer le terrain vous avez besoin. - Récupérer le champ est ce que j'ai tenté de le faire ici.
- Dans le cas général (sans regarder les entrants JSON), lorsque vous analysez JSON vous ne savez pas si vous recevez en retour un objet ou un tableau. Donc, si vous voulez utiliser
instanceof
pour vérifier, et puis jeté du type approprié. Si vous de "fiducie" au format JSON à être d'une certaine façon, vous pouvez sauter et d'analyser directement comme un objet. Dans les deux cas, une fois que vous avez un objet (Java Carte), vous pouvezget
l'élément que vous souhaitez à l'aide de la touche appropriée. Bien sûr, si vous voulez quelque chose de plusieurs couches, vous devez "peler l'oignon" pour y arriver. - (Malheureusement, Gson cache ce niveau d'accès, vous forçant à utiliser un plus obscurs approche.)
- J'ai lu à ce sujet, j'ai besoin de faire quelque chose le long des lignes de: personnes = jsonobject.obtenir(les gens), alors personne = les gens.get(personne)
Vous devez vous connecter pour publier un commentaire.
C'est Java. Les champs sont résolus basé sur le type déclaré de l'objet de référence.
Basé sur votre erreur du compilateur,
gsonContent
est une variable de typeObject
.Object
ne dispose pas d'unfind
champ.Vous êtes déjà dire Gson ce type de désérialiser, donc il suffit de faire le
gsonContent
variable de ce typeAussi, il me semble que vous êtes l'ombrage de l'instance
gsonContent
champ avec une variable locale.Vous pouvez effectuer les opérations suivantes en tant que bien
gson.fromJson( stringContent, RadioContent.class );
crée unRadioContent
instance indépendamment de ce que vous l'attribuer.public static void print( String find = "title" )
J'ai ajouté = "titre" pour simplifier l'exemple.JsonObject jsonObject = gson.fromJson( stringContent, JsonObject.class);
Il semble produire un vide d'objet json plutôt que l'un rempli avec le contenu de StringContent.