我有一个像这样的JSON对象数组:
{"message":"[\"{\\\"name\\\":\\\"lays\\\",\\\"calories\\\":1.0}\",\"{\\\"name\\\":\\\"lays\\\",\\\"calories\\\":0.33248466}\"]"}
我正在尝试使用此代码解析它:
Object object = parser.parse ( message );
JSONArray array = (JSONArray) object;
for(int i=0;i < array.size () ; i++)
{
System.out.println(array.get ( i ));//output; {"name":"lays","calories":1.0}
JSONObject jsonObj = ( JSONObject ) array.get ( i );//ClassCastExceptio
String foodName = ( String ) jsonObj.get ( KEY_NAME );
Float calories = (Float) jsonObj.get ( KEY_CARLORIES );
Nutrinfo info = new Nutrinfo(foodName,calories);
data.add ( info );
}
但是我在标记的行上得到了ClassCastException。这没有意义:array.get()返回一个对象,我将其转换为JSONObject。为什么我会收到此错误。
感谢。
答案 0 :(得分:2)
“message”json对象中有多个json对象。使用此代码可以恢复第一个值(需要为所有值循环)。您似乎可能想要重新排列创建json对象的方式。
Object object = parser.parse ( message );
JSONArray array = (JSONArray) object;
for(int i=0;i < array.size () ; i++)
{
JSONArray jsonArray = ( JSONArray ) array.get ( i );
JSONObject jsonObj = (JSONObject) jsonArray.get(0);
String foodName = jsonObj.getString ( KEY_NAME );
Float calories = jsonObj.getFloat ( KEY_CARLORIES );
Nutrinfo info = new Nutrinfo(foodName,calories);
data.add ( info );
}
请记住,在使用JSON时,每个{}括号都表示单个JSON对象。处理同一级别的多个对象时,必须首先获取JSON数组(就像您为每条消息所做的那样)。
答案 1 :(得分:0)
json内容中嵌入了json内容。 “外部”对象的键"message"
带有单字符串值。该字符串值恰好是序列化的json,但json解析器不会自动为您处理。您将必须获取消息值并再次解析该消息。 (实际上,它比这更糟糕,你至少有2级嵌入的json内容)。
答案 2 :(得分:-1)
Object object = parser.parse ( message );
if( object instanceof JSONObject ){
// TODO : process with single JSON Object
}
else if( object instanceof JSONArray ){
// TODO : process with JSONArray Object
}