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

Hei*_*erg 2 java json coercion classcastexception jackson

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

但我正在逐渐上述ClassCastException -如果我尝试指派key到原始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();
    }
}
Run Code Online (Sandbox Code Playgroud)

java.lang.ClassCastException: java.lang.String cannot be cast to java.lang.Integertry块中的第二行收到此异常。

我什至尝试改变int index = enty.getKey().intValue(). 但仍然发生相同的异常。

PS:我正在使用 Robolectric 框架的 Android 工作室中运行它。

T.J*_*der 5

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

String patternMetadata = "{\"1\":\"name\", \"2\":\"phone\", \"3\":\"query\"}";
// ------------------------^^-^^-----------^^-^^------------^^-^^
Run Code Online (Sandbox Code Playgroud)

如果这是 JSON(似乎是),则对象属性名称始终是字符串。

您将需要 aMap<String, String>然后您需要int明确地解析键(如果需要)。