java - 如何使用 Jackson 将 JSON 对象键解析为整数?

标签 java json jackson classcastexception coercion

我正在将 JSON 反序列化为 Map<Integer, String>

但是如果我尝试分配 key ,我会收到上面的 classCastException原始int .

ObjectReader reader = new ObjectMapper().reader(Map.class);
String patternMetadata = "{\"1\":\"name\", \"2\":\"phone\", \"3\":\"query\"}";
Map<Integer, String> map = reader.readValue(patternMetadata);
System.out.println("map: " + map);
for (Map.Entry<Integer, String> entry : map.entrySet())
{
    try
    {
        System.out.println("map: " + entry.getKey());
        int index = entry.getKey();
        System.out.println("map**: " + index);
    }
    catch (Exception e)
    {
        e.printStackTrace();
    }
}

我收到这个java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integer try 第二行出现异常 block 。

我什至尝试更改int index = enty.getKey().intValue() 。但仍然出现同样的异常。

P.S.:我正在使用 Robolectric 框架在 Android 工作室中运行它。

最佳答案

这些键不​​是整数,而是字符串。请注意它们的引号:

String patternMetadata = "{\"1\":\"name\", \"2\":\"phone\", \"3\":\"query\"}";
// ------------------------^^-^^-----------^^-^^------------^^-^^

如果这是 JSON(看起来是),则对象属性名称​​始终 字符串。

您需要一个 Map<String, String>然后您需要将键解析为 int明确(如果需要)。

关于java - 如何使用 Jackson 将 JSON 对象键解析为整数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38390023/

相关文章:

java - 如何使用 Jackson API 解析 XML?

java - 从 Android 编写的文本文件中读取数值

javascript - Laravel - 修改 API 数据只是为了方便

java - Apache beam 类未找到异常 : Jackson

javascript - 连接 JSON 属性

javascript - 如何将远程 JSON 数据作为本地数组访问

java - JSON/Jackson 输出在每个节点上意外添加 "parent"元素

Java代码问题: Capping an amount

Java HTTPS 请求 : hostname in certificate doesn't match

java - Hibernate 打开一堆与 MySQL 的连接