如何将 JSON 字符串转换为 Map与杰克逊 JSON
我正在尝试做这样的事情,但它不起作用:
Map<String, String> propertyMap = new HashMap<String, String>();
propertyMap = JacksonUtils.fromJSON(properties, Map.class);
但是 IDE 说:
未经检查的分配
映射到映射
执行此操作的正确方法是什么? 我只使用 Jackson,因为这是项目中已经可用的,是否有本地 Java 方式来转换 JSON?
在 PHP 中,我只需 json_decode($str)
即可返回一个数组。我这里需要基本上相同的东西。
I'm trying to do something like this but it doesn't work:
Map<String, String> propertyMap = new HashMap<String, String>();
propertyMap = JacksonUtils.fromJSON(properties, Map.class);
But the IDE says:
Unchecked assignment
Map to Map<String,String>
What's the right way to do this?
I'm only using Jackson because that's what is already available in the project, is there a native Java way of converting to/from JSON?
In PHP I would simply json_decode($str)
and I'd get back an array. I need basically the same thing here.
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(11)
[2020 年 9 月更新]虽然我多年前的原始答案似乎很有帮助并且仍在获得支持,但我现在使用 Google 的 GSON 库,我发现它更直观。
我有以下代码:
它正在从文件中读取,但是
mapper.readValue()
也将接受InputStream
并且您可以获得InputStream
code> 使用以下内容从字符串中获取:我的博客。
[Update Sept 2020] Although my original answer here, from many years ago, seems to be helpful and is still getting upvotes, I now use the GSON library from Google, which I find to be more intuitive.
I've got the following code:
It's reading from a file, but
mapper.readValue()
will also accept anInputStream
and you can obtain anInputStream
from a string by using the following:There's a bit more explanation about the mapper on my blog.
尝试
TypeFactory
。这是 Jackson JSON (2.8.4) 的代码。以下是旧版本 Jackson JSON 的代码。
Try
TypeFactory
. Here's the code for Jackson JSON (2.8.4).Here's the code for an older version of Jackson JSON.
您得到的警告是由编译器完成的,而不是由库(或实用程序方法)完成的。
直接使用 Jackson 的最简单方法是:
您调用的实用方法可能只是执行与此类似的操作。
Warning you get is done by compiler, not by library (or utility method).
Simplest way using Jackson directly would be:
Utility method you call probably just does something similar to this.
请注意,reader 实例是线程安全的。
Note that
reader
instance is Thread Safe.从字符串转换为 JSON 映射:
Converting from String to JSON Map:
对于 Kotlin,请使用:
或者包含 jackson-module-kotlin:
For Kotlin, use:
Or with jackson-module-kotlin included:
以下内容对我有用:
其中
getJsonAsMap
的定义如下:请注意,如果您的 json 中有子对象,则此将会失败(因为它们不是
String
,它们是另一个HashMap
),但如果您的 json 是属性的键值列表,则可以使用,如下所示:The following works for me:
where
getJsonAsMap
is defined like so:Note that this will fail if you have child objects in your json (because they're not a
String
, they're anotherHashMap
), but will work if your json is a key value list of properties like so:我想这会解决你的问题。
i think this will solve your problem.
使用 Google 的 Gson
为什么不使用此处中提到的 Google 的 Gson?
非常直接,为我完成了这项工作:
Using Google's Gson
Why not use Google's Gson as mentioned in here?
Very straight forward and did the job for me:
这是此问题的通用解决方案。
希望有一天有人会想到创建一个 util 方法来转换为 Map 的任何键/值类型,因此这个答案:)
Here is the generic solution to this problem.
Hope someday somebody would think to create a util method to convert to any Key/value type of Map hence this answer :)
Kotlin 的示例代码。
摇篮
Sample code for Kotlin.
Gradle