本文將介紹使用Java解析json和生成json,解析xml以及生成xml的一些方法。
前提摘要:JSON和XML 必須知道的傳輸格式.
JSON是什么?
JSON(JavaScript Object Notation) 是一種輕量級的數(shù)據(jù)交換格式。
- 對象示例
{
"firstName":"Brett",
"lastName":"McLaughlin",
"email":"aaaa"
}
{
"people":[
{"firstName":"Brett","lastName":"McLaughlin","email":"aaaa"},
{"firstName":"Jason","lastName":"Hunter","email":"bbbb"},
{"firstName":"Elliotte","lastName":"Harold","email":"cccc"}
]
}
映射的對象
源碼在[^1]菜鳥筆記Github。
public class UserModel {
private String firstName;
private String lastName;
private String email;
public String getEmail() {
return email;
}
public void setEmail(String email) {
this.email = email;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}
使用[^2]fastjosn解析String
/**
* java-object as json-string
*
* @param object
* @return
*/
public String seriazileAsString(Object object) {
if (object == null) {
return "";
}
try {
return JSON.toJSONString(object, features);
} catch (Exception ex) {
throw new SerializationException("Could not write JSON: "
+ ex.getMessage(), ex);
}
}
Object to String
/**
* json-string to java-object
*
* @param jsonString
* @return
*/
public <T> T deserializeAsObject(String jsonString, Type clazz) {
if (jsonString == null || clazz == null) {
return null;
}
try {
return JSON.parseObject(jsonString, clazz);
} catch (Exception ex) {
throw new SerializationException("Could not write JSON: "
+ ex.getMessage(), ex);
}
}
執(zhí)行測試
mvn test -Dtest=JsonUtilTest#testJsonObject
XML[^3]是什么?
可擴展標記語言(英語:Extensible Markup Language,簡稱:XML),是一種標記語言。標記指計算機所能理解的信息符號,通過此種標記,計算機之間可以處理包含各種信息的文章等。如何定義這些標記,既可以選擇國際通用的標記語言,比如HTML,也可以使用像XML這樣由相關(guān)人士自由決定的標記語言,這就是語言的可擴展性。XML是從標準通用標記語言(SGML)中簡化修改出來的。它主要用到的有可擴展標記語言、可擴展樣式語言(XSL)、XBRL和XPath等。
Tip:xml使用非常廣,數(shù)據(jù)傳輸(API),數(shù)據(jù)存儲(Evernote導出格式),配置文件(Spring Application.xml)。
JAXB實現(xiàn) 對象的序列化和反序列化
映射的對象 XmlUserModel
@XmlRootElement
public class XmlUserModel {
private int id;
private String firstName;
private String lastName;
private String email;
public String getEmail() {
return email;
}
@XmlElement
public void setEmail(String email) {
this.email = email;
}
public String getFirstName() {
return firstName;
}
@XmlElement
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public int getId() {
return id;
}
@XmlAttribute
public void setId(int id) {
this.id = id;
}
public String getLastName() {
return lastName;
}
@XmlElement
public void setLastName(String lastName) {
this.lastName = lastName;
}
}
Object to String
public static String seriazileAsString(Object object, Class clazz) {
if (object == null) {
return "";
}
try {
JAXBContext jaxbContext = JAXBContext.newInstance(clazz);
java.io.StringWriter sw = new StringWriter();
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(object, sw);
return sw.toString();
} catch (JAXBException ex) {
ex.printStackTrace();
}
return null;
}
從XML str 解析 Object
public static <T> T deserializeAsObject(String xmlString, Class clazz) {
if (xmlString == null || clazz == null) {
return null;
}
JAXBContext jaxbContext = null;
try {
jaxbContext = JAXBContext.newInstance(clazz);
Unmarshaller jaxbUnmarshaller = jaxbContext.createUnmarshaller();
StringReader reader = new StringReader(xmlString);
T userModel = (T) jaxbUnmarshaller.unmarshal(reader);
return userModel;
} catch (JAXBException e) {
e.printStackTrace();
}
return null;
}
執(zhí)行測試XmlUtilTest
mvn test -Dtest=XmlUtilTest#testXmlObject
@Test
public void testXmlObject() {
XmlUserModel xmlUserModel = new XmlUserModel();
xmlUserModel.setFirstName("chen");
xmlUserModel.setLastName("billy");
xmlUserModel.setEmail("wsncqs@gmail.com");
xmlUserModel.setId(1);
String xmlStr = XmlUtil.seriazileAsString(xmlUserModel, XmlUserModel.class);
System.out.println(xmlStr);
//jsonStr -> object
XmlUserModel deXmlUserModel = XmlUtil.deserializeAsObject(xmlStr, XmlUserModel.class);
assertEquals(xmlUserModel.getId(), deXmlUserModel.getId());
}
生成的xml的Str如下:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<xmlUserModel id="1">
<email>wsncqs@gmail.com</email>
<firstName>chen</firstName>
<lastName>billy</lastName>
</xmlUserModel>
更多Xml解析閱讀推薦
參考列表
- [^1]菜鳥筆記源碼
- Jackson
- Jackson 2 – Convert Java Object to / from JSON
- [^2]fastjson
- Gson
- [^3]XML WIKI
- Java XML Tutorial
- JAXB
- SAX
- dom4j
本文源代碼地址:https://github.com/daimaniu/cainiaobiji ,歡迎star 和 fork。
下期預告
下期預告(9月19號):Java常見的加密編碼學習。
歡迎大家關(guān)注我,周更兩篇Java技術(shù)文章。菜鳥筆記 下周一不見不散