0

Androidを使用してphpから送信されたjsonデータを解析しようとしています。これがコードです。json の出力は次のようになります: "{documents:[{idnumber:'28044684',doctype:'National ID'}],success:1}"

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;
4

2 に答える 2

2

catch の後に 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"}
于 2013-05-03T10:23:16.407 に答える