PHP學習——與Android進行json交互的php後端搭建

這篇博客是與我在Android學習系列中的一篇博客相互對應的,

鏈接是:http://blog.csdn.net/qq_37656219/article/details/79372788

身邊一些朋友說他們在用那篇博客的代碼時會在下面這句代碼報錯,出現builder.toString()無法轉化爲json對象的錯誤。

	JSONObject jsonObject   = new JSONObject(builder.toString());

而我自己試驗卻沒有錯。所以對好友們搭建的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){}
	}

這時候用$user["name"]就會出錯了,而需要用$user[0]["name"]才能讀取到“lala”的字符串

就到這裏了,我是菜鳥,多多指教  DRW




發佈了35 篇原創文章 · 獲贊 8 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章