带有{“key”=>的Android HTTP帖子JSON}

时间:2014-02-03 12:48:38

标签: java android json

我最近在我的应用中使用了很多HTTP帖子,而且我一直在使用这个模板:

HttpPost httpPost = new HttpPost(server);
List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("name","John"));
nameValuePairs.add(new BasicNameValuePair("age",13+""));
...
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs));
httpClient.execute(httpPost);

在服务器的PHP脚本上:

$name = $_POST['name'];
$age = $_POST['age'];
...

这一直都很完美。但是,最近我得到了一个请求,数据实际上应该是一个JSON本身,它将包含所有这些键值对。

更明确地说,编写PHP脚本是为了做到这一点:

$json = $_POST['data'];
$name = $json['name'];
$age = $json['age'];
...

虽然这是一个笨拙的简单修改,但我似乎无法在Android代码中使用它,即我找不到将JSON添加到HTTP数据的正确方法。

我这样做:

JSONObject json = new JSONObject();
json.put("name", "John");
json.put("age", 13+"");
...

但接下来要做什么?如何使用密钥“data”将此JSON添加到HTTP?

我试过这个:

List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>();
nameValuePairs.add(new BasicNameValuePair("data", json.toString()));
httpPost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

但我不确定这是否是正确的做法,服务器的响应也表示错误。

我该怎么办?我应该如何一般地添加一个带有键的JSONObject,甚至是JSONArray?

谢谢!

编辑:请不要把我发送到其他SO链接,我看过,没有人直接回答我的观点。

1 个答案:

答案 0 :(得分:1)

一般写json: http://www.vogella.com/tutorials/AndroidJSON/article.html#androidjson_write

对于您的任务,您不需要将您的json放入列表中。只是做

httpPost.setEntity(new UrlEncodedFormEntity(json.toString())); 
//or else use this
httpPost.setEntity(new StringEntity(json.toString(), HTTP.UTF_8));

编辑:

JSONObject json = new JSONObject();
json.put("name", "John");
json.put("age", 13+"");
JSONObject data = new JSONObject();
data.put("data", json.toString());
httpPost.setEntity(new UrlEncodedFormEntity(data.toString()));