在这个答案中,我使用了由Justin Grammens发布的示例。
关于JSON
JSON代表JavaScript对象表示法。 在JavaScript中,可以像object1.name
和object['name']
这样引用属性。 本文的示例使用了以下JSON代码。
组成部分
一个以电子邮件为键,foo@bar.com为值的粉丝对象
{
fan:
{
email : 'foo@bar.com'
}
}
因此,对象等效的写法是fan.email;
或fan['email'];
。这两种写法都具有相同的值'foo@bar.com'
。
关于HttpClient请求
以下是作者用来进行HttpClient请求的方式。我并不是专家,如果有人能更好地描述一些术语,请随意提出。
public static HttpResponse makeRequest(String path, Map params) throws Exception
{
DefaultHttpClient httpclient = new DefaultHttpClient();
HttpPost httpost = new HttpPost(path);
JSONObject holder = getJsonObjectFromMap(params);
StringEntity se = new StringEntity(holder.toString());
httpost.setEntity(se);
httpost.setHeader("Accept", "application/json");
httpost.setHeader("Content-type", "application/json");
ResponseHandler responseHandler = new BasicResponseHandler();
return httpclient.execute(httpost, responseHandler);
}
映射(Map)
如果您对Map
数据结构不熟悉,请参阅Java Map参考文档。简单来说,映射类似于字典或哈希表。
private static JSONObject getJsonObjectFromMap(Map params) throws JSONException {
Iterator iter = params.entrySet().iterator();
JSONObject holder = new JSONObject();
while (iter.hasNext())
{
Map.Entry pairs = (Map.Entry)iter.next();
String key = (String)pairs.getKey();
Map m = (Map)pairs.getValue();
JSONObject data = new JSONObject();
Iterator iter2 = m.entrySet().iterator();
while (iter2.hasNext())
{
Map.Entry pairs2 = (Map.Entry)iter2.next();
data.put((String)pairs2.getKey(), (String)pairs2.getValue());
}
holder.put(key, data);
}
return holder;
}
如果您对这篇文章有任何疑问,或者我说的不够清楚,或者您对某些仍然感到困惑的事情没有涉及...等等,随便您想到的东西都可以评论。
(如果Justin Grammens不同意,我会撤下这篇文章。但如果他同意,那么谢谢Justin的支持。)
更新
我刚好收到了一条关于如何使用代码的评论,并且发现返回类型存在错误。方法签名被设置为返回字符串,但在这种情况下并没有返回任何内容。我将签名更改为HttpResponse,并引用此链接“获取HttpResponse的响应体”
路径变量是URL,我已经更新修复了代码中的一个小错误。