2013-12-08 2 views
0

Я работаю на разбор файла JSON в моем Java и файл JSON идет как этогоСинтаксический JSON не показан вне диапазона

{"System":[{"System1":{"DisplayName":"fabcd","InternalName":"AD","SystemCode":"0001","SystemName":"vnid"},"System2":{"DisplayName":"akdfkajfl","InternalName":"AD","SystemCode":"0001","SystemName":"kjdfkafdk"}}]} 

Я не могу получить доступ к всем объектам внутри «система» массива. Пожалуйста помоги мне с этим. Мой код

Systems = jObj.getJSONArray("System"); 
       Log.d("Array", Systems.toString()); 
       JSONObject first = Systems.getJSONObject(0); 
       Log.d("CSystems",first.toString()); 

       // looping through All Contacts 
       for(int i = 0; i <=Systems.length(); i++){ 
        JSONObject c = Systems.getJSONObject(i); 
        Log.d("SubSystems", Systems.getString(0)); 

       } 

Спасибо.

+0

это действительный чек здесь http://jsonlint.com/ JSON – Raghunandan

+0

Да. Это. Я попробовал это, прежде чем разбирать его. – user2955143

+0

Просто быстро, похоже, что i <= System.length() - проблема, я начинаю с 0, меняю на i

ответ

0

Не должно for петля должна быть зацикливаться на first вместо Systems? (С изменениями, чтобы учесть тот факт, что это объект, а не массив.)

+0

Но я хочу повторить все системы. Поэтому я использовал цикл. – user2955143

+0

Я не говорил, что вы не должны использовать цикл for. Я сказал, что ваш цикл должен перебирать ключи «first» вместо элементов «Системы». Что-то вроде этого: 'String key; for (Iterator it = first.keys(); it.hasNext(); key = it.next()) {JSONObject sys = first.get (key); ...} '. В основном вам нужно идти на один уровень ниже иерархии JSON - или, как предложил Рагхунандан, изменить сам JSON, чтобы он был на одном уровне ниже (если вы контролируете формат JSON). –

0

Для разбора

 try 
     { 
      JSONObject jObj = new JSONObject("My Json string"); 
      JSONArray jr = jObj.getJSONArray("System"); 
      JSONObject jb= jr.getJSONObject(0); 
      JSONObject system1 = jb.getJSONObject("System1"); 
      String name = system1.getString("DisplayName"); 
      String internalname = system1.getString("InternalName"); 
      String SystemCode = system1.getString("SystemCode"); 
      String SystemName = system1.getString("SystemName"); 
      JSONObject system2 = jb.getJSONObject("System2"); 
      String name1= system2.getString("DisplayName"); 
      String internalname1 = system2.getString("InternalName"); 
      String SystemCode1 = system2.getString("SystemCode"); 
      String SystemName1 = system2.getString("SystemName"); 
      Log.i("..........",name+"..."+internalname+"..."+SystemCode+"..."+SystemName); 
      Log.i("..........",name1+"..."+internalname1+"..."+SystemCode1+"..."+SystemName1); 

     }catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 

или

То же, что и выше.

 try 
     { 
      JSONObject jObj = new JSONObject("My json string"); 
      JSONArray jr = jObj.getJSONArray("System"); 
      for(int i = 0; i<jr.length(); i++){ 
       JSONObject c = jr.getJSONObject(i); 
       for(int j = 1;j<3; j++){ 
       JSONObject jb = c.getJSONObject("System"+(j)); 
       Log.i("SubSystems", jb.getString("DisplayName")); 
       Log.i("SubSystems", jb.getString("InternalName")); 
       Log.i("SubSystems", jb.getString("SystemCode")); 
       Log.i("SubSystems", jb.getString("SystemName")); 
       } 
      } 

     }catch(Exception e) 
     { 
      e.printStackTrace(); 
     } 

или изменить JSON в

{ 
    "System": [ 
     { 
      "DisplayName": "fabcd", 
      "InternalName": "AD", 
      "SystemCode": "0001", 
      "SystemName": "vnid" 
     }, 
     { 
      "DisplayName": "akdfkajfl", 
      "InternalName": "AD", 
      "SystemCode": "0001", 
      "SystemName": "kjdfkafdk" 
     } 
    ] 
} 

Для разбора. Изменение json до синтаксического анализа намного проще.

try 
      { 
       JSONObject jObj = new JSONObject("My json string); 
       JSONArray jr = jObj.getJSONArray("System"); 
       for(int i = 0; i<jr.length(); i++){ 
        JSONObject c = jr.getJSONObject(i); 
        Log.i("SubSystems", c.getString("DisplayName")); 
        Log.i("SubSystems", c.getString("InternalName")); 
        Log.i("SubSystems", c.getString("SystemCode")); 
        Log.i("SubSystems", c.getString("SystemName")); 

       } 

      }catch(Exception e) 
      { 
       e.printStackTrace(); 
      } 

Вы также можете посмотреть на https://code.google.com/p/google-gson/

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