我正在尝试做这样的事情,但它不起作用:
Map<String, String> propertyMap = new HashMap<String, String>();
propertyMap = JacksonUtils.fromJSON(properties, Map.class);
Run Code Online (Sandbox Code Playgroud)
但IDE说:
未选中的作业
Map to Map<String,String>
这样做的正确方法是什么?我只使用Jackson,因为这是项目中已有的,是否有一种原生Java方式转换为JSON /从JSON转换?
在PHP中,我会简单地json_decode($str)回到一个数组.我在这里需要基本相同的东西.
djn*_*jna 288
我有以下代码:
public void testJackson() throws IOException {
ObjectMapper mapper = new ObjectMapper();
File from = new File("albumnList.txt");
TypeReference<HashMap<String,Object>> typeRef
= new TypeReference<HashMap<String,Object>>() {};
HashMap<String,Object> o = mapper.readValue(from, typeRef);
System.out.println("Got " + o);
}
Run Code Online (Sandbox Code Playgroud)
它正在读取文件,但mapper.readValue()也会接受InputStream,您可以InputStream使用以下命令从字符串中获取:
new ByteArrayInputStream(astring.getBytes("UTF-8"));
Run Code Online (Sandbox Code Playgroud)
我的博客上有关于映射器的更多解释.
Nin*_*Sun 52
试试TypeFactory.这是Jackson JSON(2.8.4)的代码.
Map<String, String> result;
ObjectMapper mapper;
TypeFactory factory;
MapType type;
factory = TypeFactory.defaultInstance();
type = factory.constructMapType(HashMap.class, String.class, String.class);
mapper = new ObjectMapper();
result = mapper.readValue(data, type);
Run Code Online (Sandbox Code Playgroud)
这是旧版Jackson JSON的代码.
Map<String, String> result = new ObjectMapper().readValue(
data, TypeFactory.mapType(HashMap.class, String.class, String.class));
Run Code Online (Sandbox Code Playgroud)
Sta*_*Man 25
你得到的警告是由编译器完成的,而不是由库(或实用程序方法)完成的.
直接使用Jackson的最简单方法是:
HashMap<String,Object> props;
// src is a File, InputStream, String or such
props = new ObjectMapper().readValue(src, new TypeReference<HashMap<String,Object>>() {});
// or:
props = (HashMap<String,Object>) new ObjectMapper().readValue(src, HashMap.class);
// or even just:
@SuppressWarnings("unchecked") // suppresses typed/untype mismatch warnings, which is harmless
props = new ObjectMapper().readValue(src, HashMap.class);
Run Code Online (Sandbox Code Playgroud)
你调用的实用方法可能只是做了类似的事情.
dpe*_*uha 18
ObjectReader reader = new ObjectMapper().readerFor(Map.class);
Map<String, String> map = reader.readValue("{\"foo\":\"val\"}");
Run Code Online (Sandbox Code Playgroud)
请注意,reader实例是线程安全.
小智 9
从String转换为JSON映射:
Map<String,String> map = new HashMap<String,String>();
ObjectMapper mapper = new ObjectMapper();
map = mapper.readValue(string, HashMap.class);
Run Code Online (Sandbox Code Playgroud)
小智 9
只是想给出一个 Kotlin 答案
val propertyMap = objectMapper.readValue<Map<String,String>>(properties, object : TypeReference<Map<String, String>>() {})
Run Code Online (Sandbox Code Playgroud)
以下对我有用:
Map<String, String> propertyMap = getJsonAsMap(json);
Run Code Online (Sandbox Code Playgroud)
其中getJsonAsMap定义如下:
public HashMap<String, String> getJsonAsMap(String json)
{
try
{
ObjectMapper mapper = new ObjectMapper();
TypeReference<Map<String,String>> typeRef = new TypeReference<Map<String,String>>() {};
HashMap<String, String> result = mapper.readValue(json, typeRef);
return result;
}
catch (Exception e)
{
throw new RuntimeException("Couldnt parse json:" + json, e);
}
}
Run Code Online (Sandbox Code Playgroud)
请注意,如果您的 json 中有子对象(因为它们不是 a ,而是 another ),则此操作将会失败,但如果您的 json 是属性的键值列表,则此操作将起作用,如下所示:StringHashMap
{
"client_id": "my super id",
"exp": 1481918304,
"iat": "1450382274",
"url": "http://www.example.com"
}
Run Code Online (Sandbox Code Playgroud)
JavaType javaType = objectMapper.getTypeFactory().constructParameterizedType(Map.class, Key.class, Value.class);
Map<Key, Value> map=objectMapper.readValue(jsonStr, javaType);
Run Code Online (Sandbox Code Playgroud)
我认为这将解决您的问题.
| 归档时间: |
|
| 查看次数: |
278871 次 |
| 最近记录: |