大家好,我对使用数组和对象数组格式化的特殊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;包含空数组和对象
如何更改代码以忽略空数组?
答案 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")));
}
}
请告诉我这是否有帮助!