마스터Q&A 안드로이드는 안드로이드 개발자들의 질문과 답변을 위한 지식 커뮤니티 사이트입니다. 안드로이드펍에서 운영하고 있습니다. [사용법, 운영진]

안드로이드에서 String이 JSONObject로 변환되지 않습니다.

0 추천
    private void showResult(){
        try {
            Log.w("2",myJson);
            JSONObject jsonObj = null;
           jsonObj=  new JSONObject(myJson);
           Log.i("test",myJson);
            JSONArray jsonArray = jsonObj.getJSONArray(TAG_JSON);

            for(int i=0;i<jsonArray.length();i++){

                JSONObject item = jsonArray.getJSONObject(i);

                String name = item.getString(TAG_NAME);
                String brand = item.getString(TAG_BRAND);
                String cat = item.getString(TAG_CAT);

                HashMap<String,String> hashMap = new HashMap<>();

                hashMap.put(TAG_NAME, name);
                hashMap.put(TAG_BRAND, brand);
                hashMap.put(TAG_CAT, cat);

                mArrayList.add(hashMap);
            }

            ListAdapter adapter = new SimpleAdapter(
                    MainActivity.this, mArrayList, R.layout.item_list,
                    new String[]{TAG_NAME, TAG_BRAND, TAG_CAT},
                    new int[]{R.id.list_name, R.id.list_brand , R.id.list_cat}
            );

            mListViewList.setAdapter(adapter);

지금 외부 db를 안드로이드와 php로 연결하여 키워드 검색 기능을 구현하려고 합니다.

그런데 키워드를 보낸 후 , JSON데이터가 String까지는 잘 넘어오고 Textview에는 제가 원하는 JSON데이터가 제대로 출력되는데 

showResult에서 파싱해서 listview에 보이게 만드려고 하는데 여기서부터가 문제입니다.

 

2019-05-07 23:50:11.040 3007-3007/com.example.myapplication W/2: {    "result": [        {            "name": "토탈리페어5 인스턴트 미라클170ml",            "brand": "로레알 파리",            "cat": "헤어,바디"        }    ]}
2019-05-07 23:50:11.044 3007-3007/com.example.myapplication D/phpquerytest: showResult : 
    org.json.JSONException: Value of type java.lang.String cannot be converted to JSONObject
        at org.json.JSON.typeMismatch(JSON.java:112)
        at org.json.JSONObject.<init>(JSONObject.java:163)
        at org.json.JSONObject.<init>(JSONObject.java:176)
        at com.example.myapplication.MainActivity.showResult(MainActivity.java:189)
        at com.example.myapplication.MainActivity.access$300(MainActivity.java:33)
        at com.example.myapplication.MainActivity$GetData.onPostExecute(MainActivity.java:111)
        at com.example.myapplication.MainActivity$GetData.onPostExecute(MainActivity.java:82)
        at android.os.AsyncTask.finish(AsyncTask.java:695)
        at android.os.AsyncTask.access$600(AsyncTask.java:180)
        at android.os.AsyncTask$InternalHandler.handleMessage(AsyncTask.java:712)
        at android.os.Handler.dispatchMessage(Handler.java:106)
        at android.os.Looper.loop(Looper.java:193)
        at android.app.ActivityThread.main(ActivityThread.java:6669)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:493)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:858)
2019-05-07 23:50:11.048 3007-3078/com.example.myapplication D/EGL_emulation: eglMakeCurrent: 0xd60fd5a0: ver 3 0 (tinfo 0xeccd2e80)

 

로그캣이 뜨는데 분명 파싱 직전까지는 myJson에 문제없이 저장되어 있는데

String cannot be converted to JSONObject문제가 생깁니다.

php코드에도 문제 없고 자바 코드 상에는 오류가 없는 거 같은데 왜 그럴까요ㅠ

 

익명사용자 님이 2019년 5월 8일 질문

1개의 답변

0 추천

로그에 나와있네요 

Value of type java.lang.String cannot be converted to JSONObject

덧을 붙이자면

{} 면 JSONObject

 "" 는 String 

[] 는 JSONArray 로 보시면 됩니다.

aucd29 (218,390 포인트) 님이 2019년 5월 8일 답변
저도 무슨 오류가 발생 하는 지 알고 있습니다.
다만 파싱 코드나 파싱되어야 하는 string에 문제가 없는데 오류가 나서 그런겁니다...
로그만 봤더니만 +_+ ㅋ 그렇군요
현재 json 아래와 같은거 같은데 맞나요 ?

 {
     "result": [{
         "name": "토탈리페어5 인스턴트 미라클170ml",
         "brand": "로레알 파리",
         "cat": "헤어,바디"
     }]
 }
넵!
일단 제가 php를 통해 mysql에서 받아온 json입니당
근데 저거 말고 다른 json을 받아와도 계속 같은 오류네요ㅠ
일단 작성하신 코드를 기반으로 해당 json 을 파싱했을때 오류는 없었습니다.
TAG_JSON 이 "result" 라는 조건하에서요

오류가 나는 정확한 지점이 정확히 어느 라인일까요?

jsonObj = new JSONObject(myJson);
Log.i("test",myJson);

JSONArray jsonArray = jsonObj.getJSONArray(TAG_JSON);

for(int i=0;i<jsonArray.length();i++){

    JSONObject item = jsonArray.getJSONObject(i);

    String name = item.getString(TAG_NAME);
    String brand = item.getString(TAG_BRAND);
    String cat = item.getString(TAG_CAT);

    HashMap<String,String> hashMap = new HashMap<>();

    hashMap.put(TAG_NAME, name);
    hashMap.put(TAG_BRAND, brand);
    hashMap.put(TAG_CAT, cat);

    mArrayList.add(hashMap);
}
Log.w("2",myJson);
        는logcat에 출력이 되는 걸 보니 바로 그 다음 줄 부터거나
jsonObj = new JSONObject(myJson) 부터인거 같아요..
myJson 값을 다른 위치에서 "" 으로 초기화 하고 있는건 아닌가요?
showResult() 함수 안까지는 JSON데이터가 들어와요...
myJson 이 멤버 변수이지만 myJson 이 다른곳에서 설정되는 곳이 없다는 이야기 신거죠?
...