【问题标题】:how to parse a json with android如何用android解析json
【发布时间】:2015-11-24 14:01:31
【问题描述】:

大家好,我对使用数组和对象数组格式化的特殊 json 有疑问。

{
  "contrat":  [
    {
      "id":0,
      "email":"RAJita@YAHOO.COM",
      "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")));
}

但数组“对比度”包含空数组和对象

如何更改我的代码以忽略空数组?

【问题讨论】:

    标签: android arrays json object


    【解决方案1】:

    你可以这样使用它:

    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")));
    }
    

    【讨论】:

      【解决方案2】:

      首先在此处验证您的 JSON:http://jsonlint.com/

      然后,我会使用 http://www.jsonschema2pojo.org/ 。 介意选择 gson 作为解析器,选择 json 作为真实数据,而不是模式,因为您复制的是真实的 JSON 数据。 您可以将您的课程下载为 JAR 或复制源代码。之后,您可以使用 GSON 解析 JSON 并加载到类中。

      改造是一个很好的方法。这是一个非常简单的下载库。

      任何其他问题,请添加为评论。保重

      【讨论】:

      • 我的问题不是创建这个json,而是读取这个json并将他添加到arraylist中
      【解决方案3】:

      试试这个,应该可以的。

      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

      【讨论】:

        【解决方案4】:

        使用您拥有的当前代码和 json,应用程序会因 JSONException 而崩溃,因为它无法为第二个元素执行 JSONObject contrat = contratObj.getJSONObject(i);,因为它是一个数组。因此,您需要在此之前检查该元素是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")));
            }
        }
        

        如果这有帮助,请告诉我!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-05-10
          • 1970-01-01
          • 1970-01-01
          • 2011-10-04
          • 2021-09-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多