如何用android解析json

时间:2015-11-24 14:01:32

标签: android arrays json object

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

class Peeker implements ChannelCallback<Message> {

    final MessagePropertiesConverter propertiesConverter = new DefaultMessagePropertiesConverter();

    @Override
    public Message doInRabbit(Channel channel) throws Exception {
        GetResponse result = channel.basicGet("someQ", false);
        if (result == null) {
            return null;
        }
        channel.basicReject(result.getEnvelope().getDeliveryTag(), true);
        return new Message(result.getBody(), propertiesConverter.toMessageProperties(
                result.getProps(), result.getEnvelope(), "UTF-8"));
    }
}
Peeker peeker = new Peeker();


...


Message peek = this.rabbitTemplate.execute(peeker);

通常如果我有一个带有对象数组的普通json,我使用了这个方法:

{{1}}

但阵列&#34; contrat&#34;包含空数组和对象

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

4 个答案:

答案 0 :(得分: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")));
}

答案 1 :(得分:0)

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

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

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

如有任何其他问题,请添加评论。小心

答案 2 :(得分: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

答案 3 :(得分:0)

使用当前的代码和json,App会因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")));
    }
}

请告诉我这是否有帮助!