Comment convertir arbitraire JSON utilisable à structure en Java
Je suis en train d'utiliser gson pour convertir cette retourné JSON dans une sorte de
structure de données telle que je peux extraire des données utiles.
Par Exemple:
http://search.twitter.com/search.json?q=test&rpp=1
Retourne:
{
"completed_in":0.028,
"max_id":196386333906837504,
"max_id_str":"196386333906837504",
"next_page":"?page=2&max_id=196386333906837504&q=test&rpp=1",
"page":1,
"query":"test",
"refresh_url":"?since_id=196386333906837504&q=test",
"results":[
{
"created_at":"Sat, 28 Apr 2012 23:52:05 +0000",
"from_user":"della_ky",
"from_user_id":525641596,
"from_user_id_str":"525641596",
"from_user_name":"kydella modeste",
"geo":null,
"id":196386333906837504,
"id_str":"196386333906837504",
"iso_language_code":"en",
"metadata":{
"result_type":"recent"
},
"profile_image_url":"http:\/\/a0.twimg.com\/profile_images\/2159990525\/webcam-toy-photo3_20_2__normal.jpg",
"profile_image_url_https":"https:\/\/si0.twimg.com\/profile_images\/2159990525\/webcam-toy-photo3_20_2__normal.jpg",
"source":"<a href="http:\/\/mobile.twitter.com" rel="nofollow">Mobile Web<\/a>",
"text":"RT @Y__U__NOOO: #SongsIKnowOffByHeart ALL SONGS I LISTEN TO. BRAIN, Y U NO REMEMBER TEST ANSWERS LIKE THAT?!?",
"to_user":null,
"to_user_id":null,
"to_user_id_str":null,
"to_user_name":null
}
],
"results_per_page":1,
"since_id":0,
"since_id_str":"0"
}
En fin de compte, je voudrais être en mesure de produire une liste de tweets avec le
nom de l'expéditeur et la date/heure du tweet.
J'ai lu à travers le gson de la documentation, mais ce qui se passe dans ma tête
pour être honnête, beaucoup de nouveaux concepts là pour moi.
Ai-je besoin de définir une classe qui correspond exactement à la structure de la
JSON afin, ensuite, de remplir une instance de cette classe? Si ce
semble très rigide/laborieuse. Idéalement, je suis à la recherche de quelque chose
qui va gérer JSON dans un formulaire et de me donner une structure que je peux utiliser
automatiquement...
Quelqu'un est-il en mesure de me donner quelques conseils? Étant nouveau sur ce - le plus
détaillée et dans les mots de moins de syllabes mieux!
Mise à jour - Merci pour les réponses, j'ai déjà eu sur ce que j'ai eu un aller à faire une classe pour saisir le twitter JSON. Cependant, depuis le JSON est intégré dans ArrayList d'Objets, je suis un peu en difficulté... pour l'instant j'ai
public class tweetData {
private double completed_in;
private long max_id;
private long max_id_str;
private String next_page;
private int page;
private String query;
private String refresh_url;
private List<tweetDetails> tweets = new ArrayList<tweetDetails>();
}
et
public class tweetDetails {
private String created_at;
private String from_user;
private long from_user_id;
private long from_user_id_str;
private String from_user_name;
private String geo;
private long id;
private long id_str;
private String iso_language_code;
// "metadata":
// {
// "result_type":"recent"
// },
private String profile_image_url;
private String profile_image_url_https;
private String source;
private String text;
private String to_user;
private String to_user_id;
private String to_user_id_str;
private String to_user_name;
}
Dont je suis l'instanciation avec
URI uri = new URI("http", "search.twitter.com", "/search.json", "q="+ searchTerms + "&rrp=" + RRP, null);
URL twitterSearch = uri.toURL();
URLConnection yc = twitterSearch.openConnection();
JsonReader reader = new JsonReader(new InputStreamReader(yc.getInputStream()));
Gson gson = new Gson();
tweetData data = gson.fromJson(reader, tweetData.class);
System.out.println(data);
Nom de la base:les valeurs sont correctement renseignées, mais le Dernier ne l'est pas.
tweetData : 0.17196614959919140865196614959919140865?page=2&max_id=196614959919140865&q=test1test?since_id=196614959919140865&q=testSIZE 0[]
Je suis donc toujours un peu en difficulté - plus de conseils, très apprécié!
Tia,
Tom
OriginalL'auteur Tom | 2012-04-29
Vous devez vous connecter pour publier un commentaire.
Oui. GSON est une bibliothèque qui peut être utilisée pour convertir des Objets Java dans leur représentation JSON. Il peut également être utilisé pour convertir une chaîne JSON à l'équivalent d'un objet Java. C'est vraiment puissant parce que vous pouvez instancier automatiquement vos objets Java à partir de la représentation JSON. En supposant que votre JSON n'est pas un changement de sa structure, vous n'avez qu'à définir les objet Java représentation une fois.
Toutefois, si vous ne voulez pas automagical de la sérialisation/deserialisation, puis essayez de regarder une simple bibliothèque comme java.net/projects/jsonp.
Vous pouvez extraire des trucs de ce juste en interrogeant les touches:
OriginalL'auteur Greg Kopff
Gson effectivement fait tout le sérialisation pour vous. Donc, oui, vous avez à écrire les classes. Pour vous, c'coutures inflexible et laborieux, mais c'est seulement parce que cette bibliothèque n'est pas fait pour ce que vous demandez (il n'a pas analyser "arbitraire" JSON).
Je suggère à tout le moins examiner écrit les classes et à l'aide de gson. La raison pour laquelle je dis que c'est parce que de toute façon la logique de votre application devra s'attendre à un modèle très précis, et de la rédaction de ce format dans une classe Java va rendre les choses plus propres. Voici une belle guide qui va vous aider à obtenir commencé de cette façon.
Si vous voulez simplement décoder le JSON sans sérialisation en Java de la classe (à mon humble avis le seul moyen d'utiliser "arbitraire" JSON), vous aurez envie d'utiliser une autre bibliothèque. Essayez cette. Il permet de décoder le JSON, et de l'utiliser en obtenant des valeurs (comme décrit dans cette question: Convertir une chaîne JSON pour objet en Java MOI?).
Content d'avoir pu aider 🙂
OriginalL'auteur Hassan
Il y a quelques outils qui ne gson schéma de mappage. Vous donner quelques exemples de réponses JSON, et les classes java pour y accéder sont créés pour vous.
http://www.jsonschema2pojo.org/
OriginalL'auteur bhlowe
Gson est une nappe bête!
Ou, au moins, il est devenu au fil des années qui ont passé depuis que la question a été posée.
Vous pouvez passer un Object.class en tant que second paramètre de la fromJson() méthode et il va analyser votre Json dans une structure raisonnable de LinkedTreeMaps et ArrayLists.
Plus que cela, vous pouvez vraiment faire partielle l'analyse et de laisser les extrémités libres à n'importe quel niveau de votre structure de l'objet en définissant un certain domaine comme Objet!
Gson ensuite parser Json dans votre structure et de votre champ de type Objet contient le ci-dessus mentionné structure de LinkedTreeMaps et ArrayLists.
E. g., vous pouvez définir une classe
(Imaginez, vous vous occupez principalement sur le nom de la personne, mais peut vous voulez plus de détails aussi quelque part. Pour vous connecter, par exemple.)
Alors vous pouvez passer à la suivante Json à la fromJson(entrée, Person.class) méthode en tant que premier paramètre
Le résultat aura l' nom champ rempli avec "Carlsson" chaîne et détails champ contiendra un LinkedTreeMap avec des touches de "adresse" et "téléphones", etc.
OriginalL'auteur Stanislav Karakhanov