我在尝试发布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"}]
答案 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。