我想使用杰克逊将下面的json数组转换为java hashmap并迭代如下值:
需要这样的输出:
key Value
1 sql
2 android
3 mvc
JSON示例:在此处输入代码
{
"menu": [
{
"1": "sql",
"2": "android",
"3": "mvc"
}
]
}
如果有人可以共享代码以实现此目标,将不胜感激。
谢谢你的帮助!
这是一个揭示想法的解决方案:
public class JacksonSerializer {
public static final String INPUT = "{\n" +
" \"menu\": [\n" +
" {\n" +
" \"1\": \"sql\",\n" +
" \"2\": \"android\",\n" +
" \"3\": \"mvc\"\n" +
" }\n" +
" ]\n" +
"}";
public static class MenuItems {
Map<String, String> menu = Maps.newHashMap();
}
public static class MenuItemsDeserializer extends JsonDeserializer<MenuItems> {
@Override
public MenuItems deserialize(org.codehaus.jackson.JsonParser jsonParser,
DeserializationContext deserializationContext)
throws IOException, JsonProcessingException {
JsonNode node = jsonParser.getCodec().readTree(jsonParser);
final JsonNode elems = node.getElements().next().getElements().next();
final Map<String, String> map = Maps.newHashMap();
final Iterator<Map.Entry<String, JsonNode>> it = elems.getFields();
while (it.hasNext()) {
final Map.Entry<String, JsonNode> entry = it.next();
map.put(entry.getKey(), entry.getValue().asText());
}
final MenuItems menuItems = new MenuItems();
menuItems.menu = map;
return menuItems;
}
}
public static void main(final String[] args) throws IOException {
ObjectMapper mapper = new ObjectMapper();
SimpleModule module = new SimpleModule("SimpleModule",
new Version(1,0,0,null));
module.addDeserializer(MenuItems.class, new MenuItemsDeserializer());
mapper.registerModule(module);
MenuItems menuItems = mapper.readValue(INPUT, MenuItems.class);
}
}
问题内容: 使用以下代码,我已将列表转换为json,但格式如下: 但我想将其转换为: 以下是我的弹簧控制器: 问题答案: 更改从返回结果给放: 如此; 更新 您可以将结果作为字符串返回,您将获得所需的内容: 返回的字符串是json格式。
问题内容: 我将JSON库从org.json更改为Jackson,我想迁移以下代码: 现在在杰克逊,我有以下几点: 但是我不喜欢那里的演员,有可能吗?有没有一种等效于的方法,以便在不是数组的情况下进行适当的错误处理? 问题答案: 是的,Jackson手动解析器的设计与其他库完全不同。特别是,您会注意到它具有通常与其他API的数组节点关联的大多数功能。因此,您无需强制转换为即可使用。这是一个例子:
问题内容: 正在具有json数组的String如下 我想将此jsonarray转换为。为此,我添加了maven依赖项“ ”,还为员工编写了pojo类。但是当我尝试运行下面的代码时 正在收到以下异常。 有人可以告诉我丢失了什么或做错了什么吗 问题答案: 问题不在您的代码中,而在您的json中: 这表示一个包含属性Compemployes的对象,该属性是Employee的列表。在这种情况下,您应该创建
我如何告诉Jackson忽略JSON名称? 我有以下POJO: 当我有这样的东西: “ABCName”:“foo”,然后杰克逊没有认出它抛出错误。 它期望的是: “abcName”:“foo”。 代码: 输出:{"abcname":"Foo"} 然后我试着用@JsonProperty(“ABCName”)注释ABCName 在我注释并运行代码之后,我得到的是:{“ABCName”:“Foo”,“A
我的服务以JSONArray的形式收到响应。我想将这个JSONArray转换为JavaObject(使用POJO类)。我使用Jackson API进行JSON到JavaObject的转换。我还为该转换编写了帮助类(类名:JsonUtil)。 请在下面找到我的 JSON 响应,其中包含 JSON 对象以及 JSON 数组。 由此,如果未显示数组,则可以进行转换。如果出现数组,则表示它抛出以下错误。
问题内容: 我有一个Java类,我对从JSON反序列化感兴趣。我已经配置了一个特殊的MixIn类,以帮助我进行反序列化。只有和实例变量与适当的getter和setter方法相结合。看起来像这样: 在我的测试客户端中,我执行以下操作,但是在编译时它当然不起作用,因为与类型不匹配有关。 我知道我可以通过创建一个仅包含一个“响应”对象的方法来缓解此问题,但是随后我将不得不为我想返回的每种类型创建这些有点