Json转换异常
org.codehaus.jackson.JsonParseException: Unexpected character ('n' (code 110)): was expecting double-quote to start field name at [Source: java.io.StringReader@7c87c24a; line: 1, column: 3]
这种类似的问题可以检查转换的字符串是否出现了未加引号的情况。在 JSON 规范中,它要求对字段名称使用双引号。要使 Jackson 能够处理未加引号的字段名称,请添加JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES配置ObjectMapper。
package com.mkyong.jsonexample;
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
import org.codehaus.jackson.JsonParseException;
import org.codehaus.jackson.JsonParser;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
import org.codehaus.jackson.type.TypeReference;
public class JsonMapExample {
public static void main(String[] args) {
String json = "{name:\"mkyong\"}";
Map<String,String> map = new HashMap<String,String>();
ObjectMapper mapper = new ObjectMapper();
mapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true);
try {
map = mapper.readValue(json,
new TypeReference<HashMap<String,String>>(){});
System.out.println(map);
} catch (JsonParseException e) {
e.printStackTrace();
} catch (JsonMappingException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
}
输出:
{name=mkyong}
注意
在 JSON 中,不带引号的字段名称是非标准的,应避免使用。