改变我获取JSONObject的方式

时间:2014-10-26 16:50:09

标签: java android json

我想知道我是否可以改变获取JSON对象的方式。

现在我正在使用,

JSONObject d = jsonarray.getJSONObject(Integer.parseInt(xyz)-1);
String id = d.getString(TAG_ID); 
uid.setText(id);

我现在正在从我的数据库中解析jsonobject的方式如下,用户输入一个id,我的jsonparser查找此id,除了我想要id为字符串而不是一个整数。由于它搜索的值具有不规则和特殊的符号。它需要能够解析的数字是Code-39符号/格式。它将与条形码扫描结合使用..

由于getJSONObject(int)在int中呈现,我想知道你们是否知道我改变getjsonobject的类型的方法..或者另一种方式..因为它现在解析的方式我只能使用常规号码..


编辑代码

}
private class JSONParse extends AsyncTask<String, String, JSONObject> {
    private ProgressDialog pDialog;
    @Override
    protected void onPreExecute() {
        super.onPreExecute();
        pDialog = new ProgressDialog(DisplayMessageActivity.this);
        pDialog.setMessage("Getting Data ...");
        pDialog.setIndeterminate(false);
        pDialog.setCancelable(true);
        pDialog.show();
    }
    @Override
    protected JSONObject doInBackground(String... args) {
        JSONParser jParser = new JSONParser();
        // Getting JSON from URL
        JSONObject json = jParser.getJSONFromUrl(url);
        return json;
    }
    @Override
    protected void onPostExecute(JSONObject json) {
        pDialog.dismiss();
        String xyz = edt.getText().toString();


        try {    // Getting JSON Array


            user = json.getJSONObject(TAG_TAG);
            JSONObject c = user.getJSONObject(xyz);
            String id = c.getString(TAG_ID);
            String fname = c.getString(TAG_FIRST_NAME);
            String lname = c.getString(TAG_LAST_NAME);
            String email = c.getString(TAG_EMAIL);
            String ipa = c.getString(TAG_IP);
            String country = c.getString(TAG_COUNTRY);
            //Set JSON Data in TextView
            uid.setText(id);
            name1.setText(fname);
            name2.setText(lname);
            email1.setText(email);
            ipaddres.setText(ipa);
            cou.setText(country);




public class JSONParser {
    static InputStream is = null;
    static JSONObject jObj = null;
    static String json = "";
    // constructor
    public JSONParser() {
    }
    public JSONObject getJSONFromUrl(String url) {
        // Making HTTP request
        try {
            // defaultHttpClient
            DefaultHttpClient httpClient = new DefaultHttpClient();
            HttpPost httpPost = new HttpPost(url);
            HttpResponse httpResponse = httpClient.execute(httpPost);
            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, "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;
    }
}

1 个答案:

答案 0 :(得分:0)

您必须使用int的原因是您正在使用JSONArray。根据定义,它使用从零开始的增量int作为索引。要获取具有特定属性(例如“id”)的项,您必须首先解析整个数组,然后遍历这些值,直到找到具有所需id属性的对象。

您可以将每个项目设为正常JSONObject,而不是使用数组,如下所示:

{
    "items": {
        "-1": {},
        "+1": {},
        "00": {}
    }
}

这样,每个项目都是items对象的属性,可以使用其字符串id:

进行访问
JSONObject items = json.getJSONObject("items");
JSONObject myItem = items.getJSONObject(xyz);