身邊一些朋友說他們在用那篇部落格的程式碼時會在下面這句程式碼報錯,出現builder.toString()無法轉換成json物件的錯誤。
JSONObject jsonObject = new JSONObject(builder.toString());
<br/>而我自己試驗卻沒有錯。所以對好友們搭建的php伺服器端程式碼做了一些檢查,最後發現了問題所在。所以把這個記下來,希望能幫到踩入同一個坑的廣大學子
這裡涉及到php的json_decode函數,這個函數就是導致我的好友們出錯的原因。
現在寫出我測試過成功的程式碼,我在Android發送到php伺服器的是一個jsonObject,{“name”:“lala”},對應的實體名字是“ userJson”,也就是如下程式碼
JSONObject jo = new JSONObject();
jo.put("name", "test");
params.add(new BasicNameValuePair("userJson",jo.toString() ));
這時我的伺服器端程式碼為
<?php $json_string = $_POST ["userJson"]; $user = json_decode($json_string,true);//这里的true加上就会将android发来的json字符串转化为关联数组
$arr = array( 'user_id' => $user["name"] ); $str = json_encode($arr); echo($str); ?>
這時候在android就不會報無法轉換為JSONObject的錯誤,當然我也可以在伺服器端將JSONArray送到伺服器。也就是[{"name":"lalala"},{}]
這種情況下上面的PHP程式碼就無法正確執行到最後一句了,這時候我們要將程式碼修改為
<?php $json_string = $_POST ["userJson"]; $user = json_decode($json_string,true);//这里的true加上就会将android发来的json字符串转化为关联数组 $arr = array( 'user_id' => $user[0]["name"] ); $str = json_encode($arr); echo($str); ?>
為什麼要這麼修改呢?原因其實很簡單,我們在json_decode函數裡面加上true時會將接收到的$json_string轉換成關聯數組。例如第一個例子,jsonObject會被轉換成
array(1){ ["name"]=>String("test") }
所以用$user["name"]就可以讀取到「test」這個字串,而在例二中轉換的結果是
array(2){ [0]=>array(1){ ["name"]=>String("lala") } [1]=>array(0){} }
<br/>
這時候用$user["name"]就會出錯了,而需要用$user[0]["name"]才能讀取到“ lala」的字串
相關推薦:
當controller方法的傳回值為簡單型別,該如何與json互動?
#
以上是php後端實作與Android進行json交互的詳細內容。更多資訊請關注PHP中文網其他相關文章!