2014-10-26 3 views
0

Мне было интересно, могу ли я изменить способ получения объекта JSON.Измените мой способ получить JSONObject

Сейчас я использую,

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

Путь я разбор моего jsonobject из моей базы данных прямо сейчас, выглядит следующим образом, Пользователь вводит идентификатор и мой jsonparser ищет этот идентификатор, за исключением того, что Я хочу, чтобы id был строкой вместо целого. Поскольку значение, которое он ищет, содержит нерегулярные и специальные знаки. Числа, которые должны быть в состоянии разобрать, - это код/​​формат кода 39. Он будет использоваться в соединении со сканированием штрих-кода.

С getJSONObject(int) оказывает в int, мне было интересно, если вы, ребята, знали, как мне изменить тип getjsonobject .. Или по-другому. С пути он разбор теперь я могу использовать только обычные номера ..


EDIT Для кода

} 
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

+0

Где ваш jsonarray, исходящий из и как он относится к вашей базе данных? – kiruwka

ответ

0

причины вы должны использовать Int является то, что вы работаете с JSONArray. По определению, он использует индекс инкремента int на основе нуля. Чтобы получить элемент с определенным свойством (например, «id»), вам нужно сначала проанализировать весь массив, а затем выполнить итерацию значений до тех пор, пока вы не найдете объект с желаемым свойством id.

Вместо того, чтобы использовать массив, вы могли бы сделать каждый элемент нормальный JSONObject, как это:

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

Таким образом, каждый элемент является свойством элементов объекта, а можно получить, используя его идентификатор строки:

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

Итак, что вы говорите, это то, что, когда я пытаюсь разобрать json не как массив, а как объект в одиночку, я мог бы включить конкретные символы в мой пример синтаксического анализа json? Скажем, все эти 0-9, AZ, - (тире),. (Точка), $ (знак доллара),/(форвард-косая черта), + (плюс-знак),% (процентный знак) и пространство? Не могли бы вы также убрать что-то для меня? Im использует функцию parseInt или parseLong, но так как целые числа не могут использовать странный шрифт im, который пытается получить, как бы выглядела строковая версия моего разбора? Как нет метода parseString? – Bittornont

+0

Мое предложение требует изменения структуры данных JSON (от массива до нормального объекта). Вам не нужно будет анализировать строковый идентификатор, потому что «индекс» каждого элемента уже будет строкой в ​​этом случае. –

+0

Эй, я изменил json-массив на jsonobject, за исключением того факта, что я прошу json my использовать функцию parseInt, есть ли у вас какие-либо идеи, что я могу использовать, чтобы заставить его проверить любую ценность и заставить ее вернуться так? – Bittornont

Смежные вопросы