[英]How to convert Object type to HashMap
我正在尝试以自己的方式解析 JSON,但一直坚持将 List 转换为 Map:
public static void main ( final String[] args ) throws Exception
{
{
String test = new String("[{\"label\": 1, \"value\": 12345}, {\"label\": 2, \"value\": 12}]");
final StringReader stringReader = new StringReader(test);
final Object obj = new JSONReader( stringReader ).parseData();
List list = (List)obj; // [{label=1, value=12345}, {label=2, value=12}] looks good
System.out.println(list);
for (Object o : list) {
System.out.println(o); // {label=1, value=12345} {label=2, value=12} also looks ok
if (!(o instanceof Map)) {
throw new IllegalArgumentException("Root object must be a JSON object.");
}
}
}
以下代码不会引发异常,因此o
是 Map 的实例。但是我不能使用o.get("label")
来检索 label 值。 如何从 label 和值字段中获取每个值?
实际上它适用于 objectMapper
@Test
void t2() throws IOException {
String test = new String("[{\"label\": 1, \"value\": 12345}, {\"label\": 2, \"value\": 12}]");
final StringReader stringReader = new StringReader(test);
final Object obj = new ObjectMapper().readValue(stringReader, Object.class);
List list = (List)obj; // [{label=1, value=12345}, {label=2, value=12}] looks good
System.out.println(list);
for (Object o : list) {
System.out.println(o); // {label=1, value=12345} {label=2, value=12} also looks ok
if (!(o instanceof Map)) {
throw new IllegalArgumentException("Root object must be a JSON object.");
}
System.out.println(((Map)o).get("label"));
}
}
output 是;
[{label=1, value=12345}, {label=2, value=12}]
{label=1, value=12345}
1
{label=2, value=12}
2
这可能是由于您正在使用的 JsonReader。 我无法用 parseData 方法弄清楚解析器......
您应该尝试删除关键字Object
。 这样你就不确定你在解析什么,而且你得到的元素可能不是一个list
。
我会 go 与JSON Java 库。 然后以这种方式解析值:
String test = "[{\"label\": 1, \"value\": 12345}, {\"label\": 2, \"value\": 12}]";
JSONArray jsonArray = new JSONArray(test);
for (Object o : jsonArray)
{
JSONObject jsonObject = (JSONObject) o;
System.out.println(jsonObject);
}
如您所见, JSONArray
和JSONObject
可用于解析。 他们提供了几个有助于与他们合作的功能。
我的方法命题使用简单的 org.json 库 (2009) 并且完全不同:
private Map<Integer, Integer> convertJsonToMap(String test) throws JSONException {
Map<Integer, Integer> map = new HashMap<>();
JSONArray jsonArray = new JSONArray(test);
for (int i = 0; i < jsonArray.length(); i++) {
JSONObject jsonObject = jsonArray.getJSONObject(i);
if (jsonObject.length() == 2) {
map.put((Integer) jsonObject.get(jsonObject.names().getString(0)),
(Integer) jsonObject.get(jsonObject.names().getString(1)));
}
}
return map;
}
仅返回整数,如果任何“标签”或“值”是字符串,则可能抛出 ClassCastException。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.