php後端實現與Android進行json互動

來源:互聯網
上載者:User
身邊一些朋友說他們在用那篇部落格的代碼時會在下面這句代碼報錯,出現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”的字串

相關推薦:

當controller方法的傳回值為簡單類型,該如何與json互動?

jQuery和PHP的JSON互動,如何避免二維數組

php與html簡單的json互動樣本

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.