개발모음집

Json으로 데이터를 주고 받을 때 JSON에 불필요한 데이터가 삽입된 경우 본문

TheRestDevelop

Json으로 데이터를 주고 받을 때 JSON에 불필요한 데이터가 삽입된 경우

void 2018. 4. 2. 09:00
W/System.err: org.json.JSONException: Value 4 at 4 of type java.lang.Integer cannot be converted to JSONObject


안드로이드에서 PHP로 데이터를 보내면 PHP에서 db의 데이터를 읽어와 array에 넣고, json형식으로 파싱하여 안드로이드에 전송하였다.



I/jsonArray: [{"friend_no":"13"},{"user_no":"3"},{"add_from_friend":"레이나"},{"add_to_friend":"사나"},4]
I/jsonArray: [{"friend_no":"13"},{"user_no":"3"},{"add_from_friend":"레이나"},{"add_to_friend":"사나"},4,{"friend_no":"15"},{"user_no":"3"},{"add_from_friend":"레이나"},{"add_to_friend":"아이유"},9]
W/System.err: org.json.JSONException: Value 4 at 4 of type java.lang.Integer cannot be converted to JSONObject

하지만 jsonArray 마다 내가 넣으려고 하지 않았던 4나 9같은 숫자가 포함되어 있었다.

그래서 클라이언트(디바이스)에서 Json파싱을 했을 때 위와 같은 에러가 났고, 차근차근 찾아보니 PHP 파일에서 DB에 있는 데이터를 json으로 만들어줄 때 잘못하였다.



1. 수정전 PHP 파일


if (!empty($result)) {// 결과값이 있을 때 if문안의 코드를 실행한다.

$data = array();
// allnight.friend_schema.friend_tb 에서 읽어온 친구목록을 array에 넣기
if ($result) {
while ($row = pg_fetch_array($result, null, PGSQL_ASSOC)) {
$data[] = array_push($data,
array('friend_no' => $row['friend_no']),
array('user_no' => $row['user_no']),
array('add_from_friend' => $row['add_from_friend']),
array('add_to_friend' => $row['add_to_friend'])
);

//JSON_PRETTY_PRINT: 줄나눔해서 보기 좋게 보여주기위한 설정변수, JSON_UNESCAPED_UNICODE : 사람이 이해하기 어려운 문자를 사람이 볼 수 있는 텍스트로 변환해주는 변수
$json = json_encode(array("FriendListData" => $data), JSON_PRETTY_PRINT + JSON_UNESCAPED_UNICODE);
echo $json;


}
}
}


while문 밖에 있는 $data= array();의 $data 변수와 while문 안에 있는 $data[]가 있는 걸 확인했고, $data 변수를 json encoding하는 것을 확인했다.


data 변수가 중복되어 $data가 아닌 $data[] 가 json으로 인코딩 되는 것 같아서 $data[] 변수를 지웠더니 아래와 같이 내가 넣은 데이터만 나오는 것을 확인할 수 있었다.



I/jsonArray: [{"friend_no":"13"},{"user_no":"3"},{"add_from_friend":"레이나"},{"add_to_friend":"사나"}]
I/jsonArray: [{"friend_no":"13"},{"user_no":"3"},{"add_from_friend":"레이나"},{"add_to_friend":"사나"},{"friend_no":"15"},{"user_no":"3"},{"add_from_friend":"레이나"},{"add_to_friend":"아이유"}]


2. 수정 후 PHP 파일

if (!empty($result)) {// 결과값이 있을 때 if문안의 코드를 실행한다.

$data = array();
// allnight.friend_schema.friend_tb 에서 읽어온 친구목록을 array에 넣기
if ($result) {
while ($row = pg_fetch_array($result, null, PGSQL_ASSOC)) {
array_push($data,
array('friend_no' => $row['friend_no']),
array('user_no' => $row['user_no']),
array('add_from_friend' => $row['add_from_friend']),
array('add_to_friend' => $row['add_to_friend'])
);

//JSON_PRETTY_PRINT: 줄나눔해서 보기 좋게 보여주기위한 설정변수, JSON_UNESCAPED_UNICODE : 사람이 이해하기 어려운 문자를 사람이 볼 수 있는 텍스트로 변환해주는 변수
$json = json_encode(array("FriendListData" => $data), JSON_PRETTY_PRINT + JSON_UNESCAPED_UNICODE);
echo $json;


}
}
}