Dans cette réponse, j'utilise un exemple posté par Justin Grammens .
À propos de JSON
JSON est l'abréviation de JavaScript Object Notation. En JavaScript, les propriétés peuvent être référencées de la manière suivante object1.name
et comme ceci object['name'];
. L'exemple de l'article utilise ce bout de JSON.
Les pièces
Un objet fan avec email comme clé et foo@bar.com comme valeur.
{
fan:
{
email : 'foo@bar.com'
}
}
L'équivalent objet serait donc fan.email;
ou fan['email'];
. Les deux auraient la même valeur de 'foo@bar.com'
.
A propos de la requête HttpClient
Voici ce que notre auteur a utilisé pour faire un Demande HttpClient . Je ne prétends pas être un expert en la matière, donc si quelqu'un a une meilleure façon de formuler la terminologie, n'hésitez pas.
public static HttpResponse makeRequest(String path, Map params) throws Exception
{
//instantiates httpclient to make request
DefaultHttpClient httpclient = new DefaultHttpClient();
//url with the post data
HttpPost httpost = new HttpPost(path);
//convert parameters into JSON object
JSONObject holder = getJsonObjectFromMap(params);
//passes the results to a string builder/entity
StringEntity se = new StringEntity(holder.toString());
//sets the post request as the resulting string
httpost.setEntity(se);
//sets a request header so the page receving the request
//will know what to do with it
httpost.setHeader("Accept", "application/json");
httpost.setHeader("Content-type", "application/json");
//Handles what is returned from the page
ResponseHandler responseHandler = new BasicResponseHandler();
return httpclient.execute(httpost, responseHandler);
}
Carte
Si vous n'êtes pas familier avec le Map
veuillez jeter un coup d'œil à la structure de données Référence à la carte Java . En bref, une carte est similaire à un dictionnaire ou à un hachage.
private static JSONObject getJsonObjectFromMap(Map params) throws JSONException {
//all the passed parameters from the post request
//iterator used to loop through all the parameters
//passed in the post request
Iterator iter = params.entrySet().iterator();
//Stores JSON
JSONObject holder = new JSONObject();
//using the earlier example your first entry would get email
//and the inner while would get the value which would be 'foo@bar.com'
//{ fan: { email : 'foo@bar.com' } }
//While there is another entry
while (iter.hasNext())
{
//gets an entry in the params
Map.Entry pairs = (Map.Entry)iter.next();
//creates a key for Map
String key = (String)pairs.getKey();
//Create a new map
Map m = (Map)pairs.getValue();
//object for storing Json
JSONObject data = new JSONObject();
//gets the value
Iterator iter2 = m.entrySet().iterator();
while (iter2.hasNext())
{
Map.Entry pairs2 = (Map.Entry)iter2.next();
data.put((String)pairs2.getKey(), (String)pairs2.getValue());
}
//puts email and 'foo@bar.com' together in map
holder.put(key, data);
}
return holder;
}
_
N'hésitez pas à commenter toute question relative à cet article, si je n'ai pas été clair ou si je n'ai pas abordé un sujet qui vous laisse perplexe... ou tout ce qui vous passe par la tête.
_
(Je le retirerai si Justin Grammens n'approuve pas. Mais sinon, merci à Justin d'être cool à ce sujet).
Mise à jour
J'ai reçu par hasard un commentaire sur la façon d'utiliser le code et j'ai réalisé qu'il y avait une erreur dans le type de retour. La signature de la méthode était configurée pour retourner une chaîne de caractères mais dans ce cas, elle ne retournait rien. J'ai changé la signature en HttpResponse et je vous renvoie à ce lien sur Obtenir le corps de la réponse de HttpResponse la variable path est l'url et j'ai mis à jour pour corriger une erreur dans le code.