Java 从字符串到JSONObject的JSON简单ClassCastException

Java 从字符串到JSONObject的JSON简单ClassCastException,java,json,json-simple,Java,Json,Json Simple,我有一个JSON对象数组,如下所示: {"message":"[\"{\\\"name\\\":\\\"lays\\\",\\\"calories\\\":1.0}\",\"{\\\"name\\\":\\\"lays\\\",\\\"calories\\\":0.33248466}\"]"} 我正在尝试使用以下代码解析它: Object object = parser.parse ( message ); JSONArray array = (JSONArray) object; for(i

我有一个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 );

}
Object Object=parser.parse(消息);
JSONArray数组=(JSONArray)对象;
对于(inti=0;i
但是我在标记的行上得到一个ClassCastException。这没有意义:array.get()返回一个对象,我将其强制转换为JSONObject。为什么我会犯这个错误


谢谢。

您在json内容中嵌入了json内容。“外部”对象有一个带有单个字符串值的键
“message”
。该字符串值恰好是序列化的json,但json解析器不会自动为您处理该字符串值。您必须获取消息值并再次解析该值。(实际上,比这更糟糕的是,您至少有两个级别的嵌入式json内容)。

您在json内容中嵌入了json内容。“外部”对象有一个带有单个字符串值的键
“message”
。该字符串值恰好是序列化的json,但json解析器不会自动为您处理该字符串值。您必须获取消息值并再次解析该值。(实际上,比这更糟糕的是,您至少有两个级别的嵌入式json内容)。

在“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 );
}
Object Object=parser.parse(消息);
JSONArray数组=(JSONArray)对象;
对于(inti=0;i

请记住,在使用JSON时,每个{}组括号表示一个单独的JSON对象。在同一级别上处理多个对象时,必须首先获取JSON数组(就像处理每条消息一样)。

在“消息”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 );
}
Object Object=parser.parse(消息);
JSONArray数组=(JSONArray)对象;
对于(inti=0;i

请记住,在使用JSON时,每个{}组括号表示一个单独的JSON对象。在同一级别上处理多个对象时,必须首先获取JSON数组(就像处理每条消息一样)。

对不起,我对第二个JSONArray使用了错误的名称,请立即尝试。此外,JSON为基本类型内置了get方法,无需强制转换。我意识到了这一点,但它仍然不起作用。我真的对发生的事感到困惑。响应中只有一个message对象,它包含一个name和carries数组。我将消息解析为JSONArray对象,对吗?如果不将JSON对象视为JSON数组,那么JSON对象中就不能有数组。您有多条消息,每条消息都包含在{}括号内,要访问其中一条消息,您必须遍历这些对象的JSON数组。在您的消息对象中,您又有了多个json对象,每个对象都包含卡路里/等的键。您必须将消息“对象”视为另一个json数组。请提供获得异常的行,我可以更好地帮助您。我终于让它工作了,但在删除
JSONArray JSONArray=(JSONArray)array.get(I)并更改
JSONObject JSONObject=(JSONObject)jsonArray.get(0)
to
JSONObject jsonObj=(JSONObject)jsonArray.get(i)。谢谢男人:)对不起,我用错了第二个JSONArray的名字,现在试试。此外,JSON为基本类型内置了get方法,无需强制转换。我意识到了这一点,但它仍然不起作用。我真的对发生的事感到困惑。响应中只有一个message对象,它包含一个name和carries数组。我将消息解析为JSONArray对象,对吗?如果不将JSON对象视为JSON数组,那么JSON对象中就不能有数组。您有多条消息,每条消息都包含在{}括号内,要访问其中一条消息,您必须遍历这些对象的JSON数组。在您的消息对象中,您又有了多个json对象,每个对象都包含卡路里/等的键。您必须将消息“对象”视为另一个json数组。请提供获得异常的行,我可以更好地帮助您。我终于让它工作了,但在删除
JSONArray JSONArray=(JSONArray)array.get(I)并更改
JSONObject JSONObject=(JSONObject)jsonArray.get(0)
to
JSONObject jsonObj=(JSONObject)jsonArray.get(i)。谢谢男人:)没有注释的代码是没有用的。你的答案也不能回答“为什么我会出现这个错误”的问题。没有注释的代码也没有用。你的答案也不能回答“我为什么会犯这个错误”的问题。