目錄
前言
Json數據格式這兩年發展的很快,其聲稱相對XML格式有很對好處:
- 容易閱讀;
- 解析速度快;
- 占用空間更少。
不過,JSON 和 XML兩者糾結誰優誰劣,這里不做討論,可以參見知乎上為什么XML這么笨重的數據結構仍在廣泛應用?。
最近在項目中,會有各種解析JSON文本的需求,使用第三方Jackson工具來解析時,又擔心當增加會減少字段,會不會出現非預期的情況,因此,研究下jackson解析json數據格式的代碼,很有需要。
Jackson使用工具類
通常,我們對json格式的數據,只會進行解析和封裝兩種,也就是json字符串--->java對象以及java對象---> json字符串。
public class JsonUtils { /** * Logger for this class */ private static final Logger logger = LoggerFactory.getLogger(JsonUtils.class); private final static ObjectMapper objectMapper = new ObjectMapper(); static { objectMapper.configure(JsonParser.Feature.ALLOW_COMMENTS, true); objectMapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_FIELD_NAMES, true); objectMapper.configure(JsonParser.Feature.ALLOW_SINGLE_QUOTES, true); objectMapper.configure(JsonParser.Feature.ALLOW_UNQUOTED_CONTROL_CHARS, true); objectMapper.configure(JsonParser.Feature.INTERN_FIELD_NAMES, true); objectMapper.configure(JsonParser.Feature.CANONICALIZE_FIELD_NAMES, true); objectMapper.configure(DeserializationConfig.Feature.FAIL_ON_UNKNOWN_PROPERTIES, false); } private JsonUtils() { } public static String encode(Object obj) { try { return objectMapper.writeValueAsString(obj); } catch (JsonGenerationException e) { logger.error("encode(Object)", e); //$NON-NLS-1$ } catch (JsonMappingException e) { logger.error("encode(Object)", e); //$NON-NLS-1$ } catch (IOException e) { logger.error("encode(Object)", e); //$NON-NLS-1$ } return null; } /** * 將json string反序列化成對象 * * @param json * @param valueType * @return */ public static <T> T decode(String json, Class<T> valueType) { try { return objectMapper.readValue(json, valueType); } catch (JsonParseException e) { logger.error("decode(String, Class<T>)", e); } catch 