如何将Object类型转换为HashMap
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")
来检索标签值。如何从标签和值字段中获取每个值?
实际上它适用于 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"));
}
}
输出为;
[{label=1, value=12345}, {label=2, value=12}]
{label=1, value=12345}
1
{label=2, value=12}
2
这可能是由于您使用的 JsonReader。我无法用 parseData 方法找出解析器...
您应该尝试删除关键字 Object
。这样你就不确定你在解析什么,并且你得到的元素可能不是 list
.
我会选择 JSON Java Library。
然后这样解析值:
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;
}
Returns 仅整数,如果任何“标签”或“值”是字符串,则可能抛出 ClassCastException。
我正在尝试以我自己的方式解析 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")
来检索标签值。如何从标签和值字段中获取每个值?
实际上它适用于 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"));
}
}
输出为;
[{label=1, value=12345}, {label=2, value=12}]
{label=1, value=12345}
1
{label=2, value=12}
2
这可能是由于您使用的 JsonReader。我无法用 parseData 方法找出解析器...
您应该尝试删除关键字 Object
。这样你就不确定你在解析什么,并且你得到的元素可能不是 list
.
我会选择 JSON Java Library。 然后这样解析值:
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;
}
Returns 仅整数,如果任何“标签”或“值”是字符串,则可能抛出 ClassCastException。