흔히 많이들 하시는 방식인.. http를 통하여 json 데이터 읽어와서 string을 JSONObject로 변환해주는 방식입니다.
그런데 JSON 데이터에 문자열을 감싸는 부분에 백슬러쉬(\)가 포함되면..
String을 JSONObject로 생성해줄때에 여지없이 아래와 같은 에러가 뜹니다.
(jsonObj = new JSONObject(스트링);)
org.json.JSONException: Expected literal value at character.. 어쩌고저쩌고..
예를 들면 이런 식입니다..
(1)
{
"BANNER": {
"BANNER_LINK_URL": "이미지 링크 URL",
.
.
.
(2)
{
\"BANNER\": {
\"BANNER_LINK_IMG\": \"이미지 링크 URL\",
.
.
.
1번은 정상 파싱되고, 2번처럼 백슬러쉬를 감싸면 에러가 발생되는군요..
그런데 더 이해가안되는건.. JSON 데이터를 String 변수에 하드코딩해서 로컬데이터로 테스트해보면 백슬러쉬가 포함되도 잘 동작한다는 점입니다.
제가 이런 질문을 올리는 것은.. 현재 개발 중인 앱에서 JSON을 연동하면..
허니콤3.2에서는 JSON 데이터에 백슬러쉬가 있던없던 상관없는데,, 허니콤3.1버전에서는 파싱에러가 떠서.. 스트링을 JSONObject로 생성하는 과정에서 에러가 나기 때문입니다..
혹시 왜 그런지 이유를 아시는 고수분 계신가요??
\"BANNER\": {
\"BANNER_LINK_IMG\": \"이미지 링크 URL\",
이걸 수동으로 코드에 집어 넣으면
\\\"BANNER\\\": {
\\\"BANNER_LINK_IMG\\\": \\\"이미지 링크 URL\\\",
...
위처럼 써야 한다는건 아시나요?
제 생각에는 String 에서 특수문자 기입법에 대해 잘못 생각하시는 것 같은데요
답변 감사드립니다.
제가 일차적으로 궁금한 것은.. http로 읽어온 JSON 데이터에 백슬러쉬가 포함된 경우일때.. jsonObj = new JSONObject(스트링) 부분에서 에러가 나는 이유가 궁금하거든요..
로컬 String으로 테스트할때는 님께서 말씀하신 대로 했었구요..
JSON 오브젝트로 치환하는 부분에서 백슬러쉬 때문에 에러가 나는 이유가 궁금한겁니다..
아 그리고.. 게시판 글을 쭉 검색해보니.. 예전에 어떤 분께서 올리신 글이있는데요.. (저랑 비슷한 케이스인듯..)
마지막에 자답으로 남기신 글이 정확히 이해가 안되는데.. 정확히 무슨말인지 자문 부탁 드립니다.
해당 글 링크입니다.
http://www.androidpub.com/index.php?mid=android_dev_qna&page=10&document_srl=2044496




저도 JSON 파싱을 많이 사용했지만 딱히 버전에 따라서, 그리고 허니컴3.1 버전에서 문제가 있다고 들은 적은 없는 것 같습니다.