2013-05-03 7 views
0

im пытается проанализировать данные json, отправленные с php с использованием android. Вот код. выход JSON выглядит примерно так: "{документы: [{IDNumber: '28044684', доктайп: 'Национального ID'}], успех: 1}"JSON String Parsing

им получить ошибку ERROR parsing JSONObject value [null]; даже когда я непосредственно присвоить json для переменной json. В чем может быть проблема??

String json = ""; 
     List<NameValuePair> params = new ArrayList<NameValuePair>(); 
     params.add(new BasicNameValuePair("idnumber", parameter)); 
     // Making HTTP request 
     try { 

      // check for request method 
      if (method == "POST") { 
       // request method is POST 
       // defaultHttpClient 
       DefaultHttpClient httpClient = new DefaultHttpClient(); 
       HttpPost httpPost = new HttpPost(url); 
       httpPost.setEntity(new UrlEncodedFormEntity(params)); 
       HttpResponse httpResponse = httpClient.execute(httpPost); 
       HttpEntity httpEntity = httpResponse.getEntity(); 
       is = httpEntity.getContent(); 

      } else if (method == "GET") { 
       // request method is GET 
       DefaultHttpClient httpClient = new DefaultHttpClient(); 
       String paramString = URLEncodedUtils.format(params, "utf-8"); 
       url += "?" + paramString; 
       HttpGet httpGet = new HttpGet(url); 
       HttpResponse httpResponse = httpClient.execute(httpGet); 
       HttpEntity httpEntity = httpResponse.getEntity(); 
       is = httpEntity.getContent(); 
      } 

     } catch (UnsupportedEncodingException e) { 
      e.printStackTrace(); 
     } catch (ClientProtocolException e) { 
      e.printStackTrace(); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 

     try { 
      BufferedReader reader = new BufferedReader(new InputStreamReader(is, "utf-8"), 300); 
      StringBuilder sb = new StringBuilder(); 
      String line = null; 
      while ((line=reader.readLine())!= null) { 
       sb.append(line + "\n"); 
      } 
      is.close(); 
      json = sb.toString(); 
     } catch (Exception e) { 
      Log.e("Buffer Error", "Error converting result " + e.toString()); 
     } 
     // try parse the string to a JSON object 
     try { 
      jObj = new JSONObject(json); 
     } catch (Exception e) { 
      Log.e("JSON Parser", "Error parsing data " + e.toString()); 
      try { 
       jObj = new JSONObject(json.substring(json.indexOf("{"), 
         json.lastIndexOf("}") + 1)); 
      } catch (Exception e0) { 
       Log.e("JSON Parser0", 
         "Error parsing data [" + e0.getMessage() + "] " 
           + json); 
       Log.e("JSON Parser0", "Error parsing data " + e0.toString()); 
       try { 
        jObj = new JSONObject(json.substring(1)); 
       } catch (Exception e1) { 
        Log.e("JSON Parser1", 
          "Error parsing data [" + e1.getMessage() + "] " 
            + json); 
        Log.e("JSON Parser1", 
          "Error parsing data " + e1.toString()); 
        try { 
         jObj = new JSONObject(json.substring(2)); 
        } catch (Exception e2) { 
         Log.e("JSON Parser2", 
           "Error parsing data [" + e2.getMessage() 
             + "] " + json); 
         Log.e("JSON Parser2", 
           "Error parsing data " + e2.toString()); 
         try { 
          jObj = new JSONObject(json.substring(3)); 
         } catch (Exception e3) { 
          Log.e("JSON Parser3", "Error parsing data [" 
            + e3.getMessage() + "] " + json); 
          Log.e("JSON Parser3", "Error parsing data " 
            + e3.toString()); 
         } 
        } 
       } 
      } 
     } 
     return null; 
+0

JSON синтаксического анализа очень проста, но не то, что вы сделали. Попробуйте несколько уроков –

+0

Вы должны быть более конкретными, это действительно может быть что угодно, даже «возврат null». Попробуйте обрезать его до самого простого примера, с жестко закодированной строкой и без резервного копирования. – Szocske

ответ

3

Ваш JSON недействителен

{ 
documents: [ 
    { 
     idnumber: '28044684', 
     doctype: 'NationalID' 
    } 
], 
success: 1 
} 

См: http://json.org/example.html для некоторого правильного формата

Правильный формат должен быть

{ 
"documents": [ 
    { 
     "idnumber": "28044684", 
     "doctype": "NationalID" 
    } 
], 
"success": 1 
} 

Validate здесь

+1

В JSON все кавычки - это двойные кавычки, поэтому '' NationalID ''вместо'' NationalID'', и все ключи должны быть указаны, поэтому '' документы ': 'вместо' documents: ' – johusman

2

Попробуйте изменить TRY блок после того, как улов на этот

try { 
      BufferedReader reader = new BufferedReader(new InputStreamReader(
        is, "iso-8859-1"), 8); 
      StringBuilder sb = new StringBuilder(); 
      String line = null; 
      while ((line = reader.readLine()) != null) { 
       sb.append(line + "\n"); 
      } 
      is.close(); 
      json = sb.toString(); 
     } catch (Exception e) { 
      Log.e("Buffer Error", "Error converting result " + e.toString()); 
     } 

     // try parse the string to a JSON object 
     try { 
      jObj = new JSONObject(json); 
     } catch (JSONException e) { 
      Log.e("JSON Parser", "Error parsing data " + e.toString()); 
     } 

     // return JSON String 
     return jObj; 

, а затем извлечь информацию, которую вы хотите непосредственно из JSONObject вернулся

JSONObject json = jsonParser.makeHttpRequest(host + url_app_list, 
        "GET", params); 

      if (json == null) { 
       Log.e("Server Warning", "No Server Response"); 
       message = "No Server Response"; 
      } else { 

       Log.d("All Apps: ", json.toString()); 

       try { 

        success = json.getInt(TAG_SUCCESS); 

        if (success == 1) { 

         apps = json.getJSONArray(TAG_APPS); 

         for (int i = 0; i < apps.length(); i++) { 
          JSONObject c = apps.getJSONObject(i); 
          AppData tempApp = new AppData(); 

          tempApp.setName(c.getString(TAG_NAME)); 
          // tempApp.setPackageName(c.getString(TAG_PACKAGE)); 
          tempApp.setServerVersion(c.getInt(TAG_VERSION)); 
          tempApp.setServerDateVersion(c.getInt(TAG_DVERSION)) 

... и т.д.. Это позволит сделать его проще в обращении, но ваш JSON является недействительным, строки должны все быть в двойных кавычках, смотрите ниже

{"success":0,"message":"Required field(s) missing"}