正在解析 JSON 数组
Parsing JSON Array
我正在尝试打印公司列表。
我的JSON对象:
{
"Name": "crunchify.com",
"Author": "App Shah",
"Company List": [
"Compnay: eBay",
"Compnay: Paypal",
"Compnay: Google"
]
}
代码:
public class ProductTypeParser {
public void parseJson(JSONObject jsonObject) throws ParseException {
JSONObject object = (JSONObject) jsonObject;
String name = (String) object.get("Name");
System.out.println(name);
String age = (String) object.get("Author");
System.out.println(age);
//loop array
JSONArray msg = (JSONArray) object.get("Company List");
Iterator<String> iterator = msg.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
错误:
SEVERE: Servlet.service() for servlet [contextServlet] in context with path [/SpringSafeHouseService2.0]
threw exception [Request processing failed; nested exception is
java.lang.ClassCastException: java.util.ArrayList cannot be cast to org.json.simple.JSONArray]
with root cause java.lang.ClassCastException: java.util.ArrayList cannot be cast to org.json.simple.JSONArray
尝试 JSONArray msg = object.getJSONArray("Company List");
而不是 JSONArray msg = (JSONArray) object.get("Company List");
投射到 ArrayList 而不是 JSONArray(因为可以是 JSONArray 或 ArrayList 或 List 的实现,这取决于你如何反序列化你的字符串,所以使用 ArrayList 或接口 List 确保你不能有 Class 抛出异常):
JSONObject parser = new JSONParser();
JSONObject object = (JSONObject) parser.parse("{\n" +
" \"Name\": \"crunchify.com\",\n" +
" \"Author\": \"App Shah\",\n" +
" \"Company List\": [\n" +
" \"Compnay: eBay\",\n" +
" \"Compnay: Paypal\",\n" +
" \"Compnay: Google\"\n" +
" ]\n" +
"}"); // Here there is a JSONArray for companies property
Map<String, Object> obj = new HashMap();
List<String> companies = new ArrayList<>();
companies.add("a");
companies.add("b");
companies.add("c");
obj.put("Name", "toto");
obj.put("Author", "titi");
obj.put("Company List", companies);
JSONObject object2 = new JSONObject(obj); // here you have an ArrayList for companies property
String name = (String) object.get("Name");
System.out.println(name);
String age = (String) object.get("Author");
System.out.println(age);
//loop array
List msg = (List) object.get("Company List");
Iterator<String> iterator = msg.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
您正在使用具有不同界面的 org.json.simple
。
这是你如何迭代 ArrayList
for(String s : object.get("Company List"))
System.out.println(s);
Json-simple(虽然缺少版本,但您似乎正在使用它,所以我的信息可能已过时)通常创建 JSONArray
的实例(扩展 ArrayList
btw .) 对于 json 字符串中的数组,即您的 "Company List"
字段。
但是,您也可以传入一个不同的 ContainerFactory
,这可能会为数组创建一个不同的 List
实例,因此这可能是您的演员表不起作用的原因(同样也有你的问题中的信息很少,无法进一步评论)。
最后,既然你应该得到一个 List
,那么转换成那个应该是安全的:
List<?> msg = (List<?>) object.get("Company List");
我正在尝试打印公司列表。
我的JSON对象:
{
"Name": "crunchify.com",
"Author": "App Shah",
"Company List": [
"Compnay: eBay",
"Compnay: Paypal",
"Compnay: Google"
]
}
代码:
public class ProductTypeParser {
public void parseJson(JSONObject jsonObject) throws ParseException {
JSONObject object = (JSONObject) jsonObject;
String name = (String) object.get("Name");
System.out.println(name);
String age = (String) object.get("Author");
System.out.println(age);
//loop array
JSONArray msg = (JSONArray) object.get("Company List");
Iterator<String> iterator = msg.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
}
}
错误:
SEVERE: Servlet.service() for servlet [contextServlet] in context with path [/SpringSafeHouseService2.0]
threw exception [Request processing failed; nested exception is
java.lang.ClassCastException: java.util.ArrayList cannot be cast to org.json.simple.JSONArray]
with root cause java.lang.ClassCastException: java.util.ArrayList cannot be cast to org.json.simple.JSONArray
尝试 JSONArray msg = object.getJSONArray("Company List");
而不是 JSONArray msg = (JSONArray) object.get("Company List");
投射到 ArrayList 而不是 JSONArray(因为可以是 JSONArray 或 ArrayList 或 List 的实现,这取决于你如何反序列化你的字符串,所以使用 ArrayList 或接口 List 确保你不能有 Class 抛出异常):
JSONObject parser = new JSONParser();
JSONObject object = (JSONObject) parser.parse("{\n" +
" \"Name\": \"crunchify.com\",\n" +
" \"Author\": \"App Shah\",\n" +
" \"Company List\": [\n" +
" \"Compnay: eBay\",\n" +
" \"Compnay: Paypal\",\n" +
" \"Compnay: Google\"\n" +
" ]\n" +
"}"); // Here there is a JSONArray for companies property
Map<String, Object> obj = new HashMap();
List<String> companies = new ArrayList<>();
companies.add("a");
companies.add("b");
companies.add("c");
obj.put("Name", "toto");
obj.put("Author", "titi");
obj.put("Company List", companies);
JSONObject object2 = new JSONObject(obj); // here you have an ArrayList for companies property
String name = (String) object.get("Name");
System.out.println(name);
String age = (String) object.get("Author");
System.out.println(age);
//loop array
List msg = (List) object.get("Company List");
Iterator<String> iterator = msg.iterator();
while (iterator.hasNext()) {
System.out.println(iterator.next());
}
您正在使用具有不同界面的 org.json.simple
。
这是你如何迭代 ArrayList
for(String s : object.get("Company List"))
System.out.println(s);
Json-simple(虽然缺少版本,但您似乎正在使用它,所以我的信息可能已过时)通常创建 JSONArray
的实例(扩展 ArrayList
btw .) 对于 json 字符串中的数组,即您的 "Company List"
字段。
但是,您也可以传入一个不同的 ContainerFactory
,这可能会为数组创建一个不同的 List
实例,因此这可能是您的演员表不起作用的原因(同样也有你的问题中的信息很少,无法进一步评论)。
最后,既然你应该得到一个 List
,那么转换成那个应该是安全的:
List<?> msg = (List<?>) object.get("Company List");