Ash*_*ish 10 java json jackson
我在使用jackson-core-2.7.3.jar解析JSON时遇到问题你可以从这里得到它们http://repo1.maven.org/maven2/com/fasterxml/jackson/core/
我的JSON文件是
[
{
"Name": "System Idle Process",
"CreationDate": "20160409121836.675345+330"
},
{
"Name": "System",
"CreationDate": "20160409121836.675345+330"
},
{
"Name": "smss.exe",
"CreationDate": "20160409121836.684966+330"
}
]
Run Code Online (Sandbox Code Playgroud)
而Java代码是我试图解析的
byte[] mapData = Files.readAllBytes(Paths.get("process.txt"));
Map<String,String> myMap = new HashMap<String, String>();
ObjectMapper objectMapper=new ObjectMapper();
myMap = objectMapper.readValue(mapData, HashMap.class);
System.out.println("Map is: "+myMap);
Run Code Online (Sandbox Code Playgroud)
但在执行时我收到了错误
com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of java.util.HashMap out of START_ARRAY token
at [Source: [B@34ce8af7; line: 1, column: 1]
at com.fasterxml.jackson.databind.JsonMappingException.from(JsonMappingException.java:216)
at com.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:873)
at com.fasterxml.jackson.databind.DeserializationContext.mappingException(DeserializationContext.java:869)
at com.fasterxml.jackson.databind.deser.std.StdDeserializer._deserializeFromEmpty(StdDeserializer.java:874)
at com.fasterxml.jackson.databind.deser.std.MapDeserializer.deserialize(MapDeserializer.java:337)
at com.fasterxml.jackson.databind.deser.std.MapDeserializer.deserialize(MapDeserializer.java:26)
at com.fasterxml.jackson.databind.ObjectMapper._readMapAndClose(ObjectMapper.java:3789)
at com.fasterxml.jackson.databind.ObjectMapper.readValue(ObjectMapper.java:2872)
Run Code Online (Sandbox Code Playgroud)
我已经尝试搜索stackoverflow但无法找到这种类型的JSON的匹配解决方案.
任何帮助,将不胜感激.
注意:这里
JSON提到的是不同的,JSON没有Key,对于第一个元素,它直接具有值,并且在该值内部具有key:value对.我不知道如何访问key:value值内的对.
创建一个简单的pojoClass First
class MyClass
{
@JsonProperty
private String Name;
@JsonProperty
private String CreationDate;
}
Run Code Online (Sandbox Code Playgroud)
并使用此代码...
byte[] mapData = Files.readAllBytes(Paths.get("process.txt"));
ObjectMapper objectMapper=new ObjectMapper();
//add this line
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
List<MyClass> myObjects = mapper.readValue(mapData , new TypeReference<List<MyClass>>(){});
Run Code Online (Sandbox Code Playgroud)
要么
byte[] mapData = Files.readAllBytes(Paths.get("process.txt"));
ObjectMapper objectMapper=new ObjectMapper();
//add this line
objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
List<MyClass> myObjects = mapper.readValue(mapData , mapper.getTypeFactory().constructCollectionType(List.class, MyClass.class));
Run Code Online (Sandbox Code Playgroud)
myObjects将包含List的MyClass.现在您可以根据您的要求访问此列表.
看起来您的文件表示具有Name和CreationDate字段的对象列表.
所以你必须使用List代替HashMap到ObjectMapper,代码如下:
List<HashMap> dataAsMap = objectMapper.readValue(mapData, List.class);
Run Code Online (Sandbox Code Playgroud)
好吧,您正在尝试将包含对象数组/列表的json 字符串转换为object。
例如:{ "key": "value"}是你想要转换的json,但实际上你正在做,
[{ "key": "value"}]。
简单的修复方法是从字符串中删除第一个和最后一个字符并尝试。希望能帮助到你;)
因为你想反序列化,引发此异常List的Map。
解决方案是创建一个TypeReference List<Map<String, Object>>:
List<Map<String, Object>> myObjects =
mapper.readValue(mapData , new TypeReference<List<Map<String, Object>>>(){});
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
37591 次 |
| 最近记录: |