私の周りの友人の中には、そのブログのコードを使うと、以下のコードでエラーが報告され、 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); ?>
ですこの時点では、JSONObjectに変換できないエラーはAndroidで報告されません。もちろん、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」を読み取ることができます。2 番目の例では、変換の結果は次のようになります。
array(2){ [0]=>array(1){ ["name"]=>String("lala") } [1]=>array(0){} }
<br/>
このとき、$user["name"]を使用するとエラーが発生するため、「lala」の文字列を読み取るには$user[0]["name"]を使用する必要があります
関連推奨事項:
Dang コントローラーメソッドの戻り値は単純な型です。 json を操作するにはどうすればよいですか?
jQueryとPHPの間のJSONインタラクション、二次元配列を避ける方法
以上がPHP バックエンドは Android との JSON インタラクションを実装しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。