2014-10-26 19 views
0

我想知道如果我能改變我得到我的JSON對象的方式。改變我獲取JSONObject的方式

現在,我使用,

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; 
    } 
} 
+0

你試過用gson嗎? – mapodev 2014-10-26 16:57:54

+0

你的jsonarray來自哪裏以及它與你的數據庫有什麼關係? – kiruwka 2014-10-26 18:02:13

回答

0

您必須使用int的原因是你和一個JSONArray工作。根據定義,它使用一個基於零的增量int作爲索引。要獲取具有特定屬性(如「id」)的項目,您必須先解析整個數組,然後遍歷這些值直到找到具有所需id屬性的對象。

而不是使用數組,你可以讓每個項目正常JSONObject,像這樣:

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

這樣,每個產品的項目對象的屬性,並且可以使用它的字符串ID就可以訪問:

JSONObject items = json.getJSONObject("items"); 
JSONObject myItem = items.getJSONObject(xyz); 
+0

所以你說什麼,當我試圖解析的JSON不是作爲一個數組,但作爲一個對象,我可以在我的json解析示例中包含特定的字符?可以說,所有這些0-9,AZ, - (破折號),。(點),$(美元符號),/(正斜槓),+(加號),%(百分號)和空間? 你能否爲我清除一些東西?即時通訊使用parseInt或parseLong函數,但由於整數不能使用奇怪的字體我試圖得到,我的解析的字符串版本是什麼樣子?由於沒有parseString方法? – Bittornont 2014-10-26 17:39:19

+0

我的建議需要更改JSON數據的結構(從數組到普通對象)。您不需要解析字符串標識符,因爲在這種情況下,每個項目的「索引」將已經是一個字符串。 – 2014-10-26 17:47:19

+0

嘿,我將json數組更改爲jsonobject,除了我要求使用parseInt函數的json這個事實,您是否知道我可以使用它來檢查任何值並使其返回? – Bittornont 2014-10-26 19:08:07