Java Jackson JSON解析为Map< String,String> [英] Java Jackson JSON parse into Map<String, String>

查看:90
本文介绍了Java Jackson JSON解析为Map< String,String>的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要将JSON解析的映射传递到具有以下签名的方法中:

QUEUE.sendMsg(Map<String, String> data);

不幸的是,我无法控制上述方法,杰克逊在Map<String, Object>中给了我解析的JSON.

我需要一个Map<String, String>其中

  1. 对于原始JSON类型,我希望其toString()转换后的值,而不是Integer,Long,Boolean.
  2. 对于复杂的JSON类型(例如列表/地图),将结果以本地JSON格式存储在String中.

例如,如果JSON输入为

{
  "name" = "John",
  "marked" = false,
  "age" = 30,
  "tags" = [ "work", "personal" ],
  "meta" = { "k1" : "v1", "k2" : "v2" },
}

我想要一个具有

{
  "name" = "John",
  "marked" = false,
  "age" = 30,
  "tags" = [ "work", "personal" ],
  "meta" = { "k1" : "v1", "k2" : "v2" },
}

Map<String, String>

map.get("name") returns "John",
map.get("marked") returns "false",
map.get("age") returns "30",
map.get("tags") returns "[ \"work\", \"personal\" ]",
map.get("meta") returns "{ \"k1\" : \"v1\", \"k2\" : \"v2\" }"

有什么办法可以实现这个目标?

不幸的是,我几乎是Java的新手,并且对Jackson毫无了解(我必须使用Jackson来解决此问题).

谢谢.

解决方案

是的,只要您确保传递FULL类型信息,隐式转换就应该起作用.像这样:

Map<String,String> map = mapper.readValue(jsonSource, new TypeReference<Map<String,String>>() { });

I need to pass the JSON parsed map into some method which has following signature:

QUEUE.sendMsg(Map<String, String> data);

Unfortunately, I have no control on above method, and Jackson gives me parsed JSON in Map<String, Object>.

I need a Map<String, String> where

  1. for the primitive JSON types, instead of Integer, Long, Boolean, I want its toString() converted value.
  2. for the complicated JSON types such as List/Map, store the result in native JSON format in String.

For example, if the JSON input is

{
  "name" = "John",
  "marked" = false,
  "age" = 30,
  "tags" = [ "work", "personal" ],
  "meta" = { "k1" : "v1", "k2" : "v2" },
}

I want a Map<String, String> which has

map.get("name") returns "John",
map.get("marked") returns "false",
map.get("age") returns "30",
map.get("tags") returns "[ \"work\", \"personal\" ]",
map.get("meta") returns "{ \"k1\" : \"v1\", \"k2\" : \"v2\" }"

Is there any way to achieve this goal?

Unfortunately, I'm almost new to Java, and has no prior knowledge of Jackson (I have to use Jackson for this solution).

Thank you.

解决方案

Yes, implicit conversions should work as long as you make sure you pass FULL type information. So something like:

Map<String,String> map = mapper.readValue(jsonSource, new TypeReference<Map<String,String>>() { });

这篇关于Java Jackson JSON解析为Map&lt; String,String&gt;的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆