2012-02-04 42 views
0

我在尝试POST JSON数组时遇到问题。Android POST 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"}]

回答

2

不知道关于Android,但看起来像magic quotes -feature PHP是添加这些斜线,如果是这样的话,你可以使用这个服务器 - 上方:

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

这解决了我的问题,谢谢 – Hank 2012-02-04 22:31:53

0

你可以尝试使用:

StringEntity params = new StringEntity("your_Data");   

,而不是你的UrlEncodedEntity。

1

做到这样:

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

但我会不得不改变任何东西在服务器端? – Hank 2012-02-04 22:17:15

+0

我不这么认为。 – waqaslam 2012-02-04 22:18:08