我有一个JSON,我希望将其转换为HashMap。我有以下代码 -
ObjectMapper mapper = new ObjectMapper();
Map<String, String> jsonData = new HashMap<String, String>();
jsonData = mapper.readValue(userPropertyJson, new TypeReference<HashMap<String,String>>(){});
如果输入JSON是
,它工作正常{"user":1, "entity": "email"}
但是当JSON如下时失败 -
{"user":1, "entity": ["email","fname","lname","phone"]}
如何映射HashMap for array?
答案 0 :(得分:4)
使用HashMap
作为键并将Object作为值声明通用String
,因为您不完全知道值的类型。
Map<String, Object>
请注意在检索数据时分配错误的类型
答案 1 :(得分:2)
使用Map<String, Object>
。实施例
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import com.fasterxml.jackson.core.JsonParseException;
import com.fasterxml.jackson.core.type.TypeReference;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JacksonParser {
public static void main(String[] args) {
String userPropertyJson = "{\"user\":1, \"entity\": [\"email\",\"fname\",\"lname\",\"phone\"]}";
ObjectMapper mapper = new ObjectMapper();
try {
Map<String, Object> jsonData = new HashMap<String, Object>();
jsonData = mapper.readValue(userPropertyJson, new TypeReference<HashMap<String,Object>>(){});
System.out.println(jsonData);
} catch (JsonParseException e) {
System.out.println(e.getMessage());
} catch (JsonMappingException e) {
System.out.println(e.getMessage());
} catch (IOException e) {
System.out.println(e.getMessage());
}
}
}
答案 2 :(得分:1)
如果您事先知道 ,那么您的json将始终具有相同的格式(String
键映射到List<String>
,无论是使用单个元素还是使用多个元素),然后您可以使用ACCEPT_SINGLE_VALUE_AS_ARRAY
反序列化功能:
ObjectMapper mapper = new ObjectMapper()
.enable(DeserializationFeature.ACCEPT_SINGLE_VALUE_AS_ARRAY);
String jsonWithArray =
"{\"user\": 1, \"entity\": [\"email\", \"fname\", \"lname\", \"phone\"]}";
Map<String, List<String>> map1 =
mapper.readValue(
jsonWithArray,
new TypeReference<HashMap<String, List<String>>>() {});
System.out.println(map1); // {user=[1], entity=[email, fname, lname, phone]}
String jsonWithoutArray = "{\"user\": 1, \"entity\": \"email\"}";
Map<String, List<String>> map2 =
mapper.readValue(
jsonWithoutArray,
new TypeReference<HashMap<String, List<String>>>() {});
System.out.println(map2); // {user=[1], entity=[email]}
这使您可以为json中的值或单个元素创建一个数组。
答案 3 :(得分:1)
查看http://www.jsonschema2pojo.org/
它允许您自动将json转换为java对象。当我需要从没有java映射或SDK的Web服务创建DTO时,我会使用它。