在JavaWeb項目中先後端直接的交互,接口之間的對接等等,基本離不開JSON。html
JSON: 全稱JavaScript Object Notation(JavaScript 對象表示法)java
JSON 是存儲和交換文本信息的語法。相似 XML。apache
JSON 比 XML 更小、更快,更易解析json
1)、最快的方式是在Spring boot中的pom.xml中加入後端
<dependency> <groupId>com.fasterxml.jackson.core</groupId> <artifactId>jackson-databind</artifactId> <version>2.8.3</version> </dependency> <dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> <version>2.6</version> </dependency>
2)、手動導入(版本不必定要相同)
app
package com.djb.common.utils; import java.io.IOException; import org.apache.commons.lang.StringUtils; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import com.fasterxml.jackson.core.JsonParser.Feature; import com.fasterxml.jackson.databind.DeserializationFeature; import com.fasterxml.jackson.databind.JavaType; import com.fasterxml.jackson.databind.ObjectMapper; import com.fasterxml.jackson.databind.SerializationFeature; import com.fasterxml.jackson.databind.util.JSONPObject; public class JsonMapper { private static Log logger = LogFactory.getLog(JsonMapper.class); private static ObjectMapper mapper; private static JsonMapper _instance = new JsonMapper(); private JsonMapper() { mapper = getMapper(); mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); mapper.configure(DeserializationFeature.FAIL_ON_IGNORED_PROPERTIES, false); // 容許出現特殊字符和轉義符 mapper.configure(Feature.ALLOW_UNQUOTED_CONTROL_CHARS, true); // 容許出現單引號 mapper.configure(Feature.ALLOW_SINGLE_QUOTES, true); } /** * 若是JSON字符串爲Null或"null"字符串, 返回Null. 若是JSON字符串爲"[]", 返回空集合. * * 如需讀取集合如List/Map, 且不是List<String>這種簡單類型時使用以下語句,使用後面的函數. */ public <T> T fromJson(String jsonString, Class<T> clazz) { if (StringUtils.isEmpty(jsonString)) { return null; } try { return mapper.readValue(jsonString, clazz); } catch (IOException e) { logger.warn("parse json string error:" + jsonString, e); return null; } } /** * 若是JSON字符串爲Null或"null"字符串, 返回Null. 若是JSON字符串爲"[]", 返回空集合. * * 如需讀取集合如List/Map, 且不是List<String>時, * 先用constructParametricType(List.class,MyBean.class)構造出JavaTeype,再調用本函數. */ @SuppressWarnings("unchecked") public <T> T fromJson(String jsonString, JavaType javaType) { if (StringUtils.isEmpty(jsonString)) { return null; } try { return (T) mapper.readValue(jsonString, javaType); } catch (IOException e) { logger.warn("parse json string error:" + jsonString, e); return null; } } /** * 構造泛型的Type如List<MyBean>, Map<String,MyBean> */ public JavaType constructParametricType(Class<?> parametrized, Class<?>... parameterClasses) { return mapper.getTypeFactory().constructParametricType(parametrized, parameterClasses); } /** * 若是對象爲Null, 返回"null". 若是集合爲空集合, 返回"[]". */ public String toJson(Object object) { try { return mapper.writeValueAsString(object); } catch (IOException e) { logger.warn("write to json string error:" + object, e); return null; } } /** * 輸出JSONP格式數據. */ public String toJsonP(String functionName, Object object) { return toJson(new JSONPObject(functionName, object)); } /** * 取出Mapper作進一步的設置或使用其餘序列化API. */ public static ObjectMapper getMapper() { if (mapper == null) { mapper = new ObjectMapper(); } return mapper; } /** * 獲取實例 * * @return */ public static JsonMapper getInstance() { return _instance; } }
package com.lrj; import java.util.Map; import com.lrj.bean.Developer; import com.lrj.common.JsonMapper; public class Test01 { public static void main(String[] args) { Developer developer = new Developer(); developer.setName("Jack"); developer.setAge(22); developer.setDept("IT");
developer.setSaraly(8000D); developer.setAddress("博客園"); //對於複雜的list,要先轉換爲map集合,再轉爲對象 String jsonStr = "{\"developer\":\"{\\\"name\\\":\\\"Jack\\\",\\\"age\\\":22,\\\"saraly\\\":8000.0,\\\"address\\\":\\\"博客園\\\",\\\"dept\\\":\\\"IT\\\"}\",\"other\":null}"; Map<String, Object> map = JsonMapper.getInstance().fromJson(jsonStr, Map.class); String beanStr = map.get("developer") + ""; Developer developer3 = JsonMapper.getInstance().fromJson(beanStr, Developer.class); System.out.println(developer3); String jsonString = JsonMapper.getInstance().toJson(developer); System.out.println(jsonString); Developer developer2 = JsonMapper.getInstance().fromJson(jsonString, Developer.class); System.out.println(developer2); } }
http://www.bejson.com/json2javapojo/new/函數
當遇到json轉換異常時能夠,先debug或者輸出json字符串,複製到網站測試是否經過,來幫助排查錯誤。工具
注意:轉化的json不是簡單的list<String>即js對象中含有其餘對象,用java實體類來說,就是一個類中包含其餘類,測試
此時得先將json轉化爲Map<String, Object>,再取出其中想要的對象,轉化爲實體類。
網站
例如:
Map<String, Object> map = JsonMapper.getInstance().fromJson(JSONStr, Map.class); String bean = map.get("Bean") + ""; if (UtilPublic.notEmpty(pickup)) { Bean b = JsonMapper.getInstance().fromJson(bean, Bean.class);
}
有好多想寫下來的,但沒寫,不是什麼忙的,就是本身懶,想着,這弄一下,至少得個把或幾個小時。
轉發請註明出處http://www.javashuo.com/article/p-eilvmihu-h.html ,謝謝!