Android POST JSON阵列到服务器

时间:2012-02-04 22:00:19

标签: android json

我在尝试发布JSON数组时遇到问题。

对于我的Android代码,我通过执行以下操作将JSON数组传递到服务器:

interests = // JSONArray of JSONObjects
final ArrayList<NameValuePair> params = new ArrayList<NameValuePair>();
params.add(new BasicNameValuePair(PARAM_USERNAME, username));
params.add(new BasicNameValuePair(PARAM_INTERESTS, interests.toString()));

HttpEntity entity =  new UrlEncodedFormEntity(params);
final HttpPost post = new HttpPost(UPDATE_INTERESTS_URI);
post.setEntity(entity);

// POST data to server

但是当我使用以下命令从服务器读取它时

$interests = $_POST["interests"];
echo $interets

看起来像[{\"a\":\"1\"},{\"b\":\"2\"}]而不是[{"a":"1"},{"b":"2"}]。第一个将无法正确解码,第二个将无法解码。

那为什么不起作用呢?

编辑:
当我在发布之前查看Android时,JSONArray.toString()看起来像[{"a":"1"},{"b":"2"}]

3 个答案:

答案 0 :(得分:2)

不知道android,但看起来像magic quotes - PHP的功能是添加这些斜杠,如果是这种情况你可以在服务器端使用它:

$interests = $_POST["interests"];
if (get_magic_quotes_gpc()) {
    $interests = stripslashes($interests);
}
echo $interests;

答案 1 :(得分:1)

以这种方式做到:

JSONObject paramInput = new JSONObject();
paramInput.put(PARAM_USERNAME, username);
paramInput.put(INTERESTS, interests.toString());
StringEntity entity = new StringEntity(paramInput.toString(), HTTP.UTF_8);

答案 2 :(得分:0)

您可以尝试使用:

StringEntity params = new StringEntity("your_Data");         

而不是你的UrlEncodedEntity。