2015-11-24 3 views
0

Привет всем, у меня есть проблема со специальным json, отформатированным с массивом массива и объекта.как разобрать json с android

{ 
    "contrat": [ 
    { 
     "id":0, 
     "email":"[email protected]", 
     "mobile":"55281055", 
     "fixe":"33740970", 
     "numContrat":"252010176", 
     "offre":"bb : Automobile", 
     "dateDebut":"2013-01-03", 
     "dateFin":"2014-01-03", 
     "statut":"En cours" 
    }, 
    [ ], 
    [ ] 
    ], 
    "success":1, 
    "code":200 
} 

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

JSONArray contratObj = json.getJSONArray("contrat"); // JSONArray 
for (int i = 0; i < contratObj.length(); i++) { 
    // get first contrat object from JSON Array 
    JSONObject contrat = contratObj.getJSONObject(i);    

    contratlist.add(new contratitem(contrat.getInt("id"), 
    contrat.getString("numContrat"), contrat.getString("offre"), 
    contrat.getString("dateDebut"), contrat.getString("dateFin"), 
    contrat.getString("statut"))); 
} 

но массив «Contrat» содержит пустой массив и объект

Как могу ли я изменить свой код, чтобы игнорировать пустой массив?

ответ

0

Вы можете использовать его как это:

JSONObject contrat = contratObj.getJSONObject(i); 
if(contrat.length!=0) { 
contratlist.add(new contratitem(contrat.getInt("id"), 
contrat.getString("numContrat"), contrat.getString("offre"), 
contrat.getString("dateDebut"), contrat.getString("dateFin"), 
contrat.getString("statut"))); 
} 
0

первый подтвердить свой JSON здесь: http://jsonlint.com/

Чем, я хотел бы использовать http://www.jsonschema2pojo.org/. ум, чтобы выбрать gson в качестве синтаксического анализатора и json как реальные данные, instad схемы, потому что вы копируете реальные данные JSON. Вы можете загрузить свой класс как JAR или скопировать источник. После этого вы можете разобрать JSON с помощью GSON и загрузить классы.

Модернизация - это хороший способ сделать это. Это очень простая библиотека загрузки.

Другие вопросы, пожалуйста, добавьте в качестве комментария. Позаботьтесь

+0

Моя проблема заключается не в создании этого json, а в том, чтобы прочитать этот json и добавить его в arraylist – slama007

+0

http://stackoverflow.com/questions/27656030/json-parsing-with-retrofit – Karoly

0

Попробуйте это, оно должно работать.

JSONArray contratObj = json.optJSONArray("contrat"); // JSONArray 
     if (contratObj != null) { 
      for (int i = 0; i < contratObj.length(); i++) { 
      // get first contrat object from JSON Array 
      JSONObject contrat = contratObj.optJSONObject(i); 

      if (contrat != null) { 
       contratlist.add(new contratitem(contrat.getInt("id"), contrat.optString("numContrat"), 
        contrat.getString("offre"), contrat.optString("dateDebut"), 
        contrat.getString("dateFin"), contrat.optString("statut"))); 
      } 
      } 
     } 

читайте выше Document

0

С текущего кода и JSON, что у вас есть, приложение будет врезаться с JSONException, поскольку он не будет в состоянии выполнить JSONObject contrat = contratObj.getJSONObject(i); для 2-го элемента, как это массив. Итак, вам нужно проверить, является ли этот элемент JSONArray или JSONObject. Изменение кода, как показано ниже, поможет вам достичь этого и проигнорировать JSONArrays.

JSONArray contratObj = json.getJSONArray("contrat"); 
for (int i = 0; i < contratObj.length(); i++) { 
    if (contratObj.get(i) instanceof JSONObject) { 
     JSONObject contrat = contratObj.getJSONObject(i); 
     contratlist.add(new contratitem(contrat.getInt("id"), 
     contrat.getString("numContrat"), contrat.getString("offre"), 
     contrat.getString("dateDebut"), contrat.getString("dateFin"), 
     contrat.getString("statut"))); 
    } 
} 

Дайте мне знать, если это поможет!