주변 친구들 중에 그 블로그에 있는 코드를 사용하면 다음 코드에서 오류가 발생한다고 보고하고, 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" 문자열을 읽을 수 있으며 두 번째 예에서는 변환 결과는 다음과 같습니다.
array(2){ [0]=>array(1){ ["name"]=>String("lala") } [1]=>array(0){} }
<br/>
이때 $user["name"]을 사용하면 오류가 발생하며 "lala"의 문자열을 읽으려면 $user[0]["name"]을 사용해야 합니다
관련 권장 사항:
당 컨트롤러 메서드의 반환 값은 json과 상호 작용하는 방법이 간단합니다.
jQuery와 PHP 간의 JSON 상호 작용, 2차원 배열을 피하는 방법
위 내용은 PHP 백엔드는 Android와의 json 상호작용을 구현합니다.의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!