java中xml转对象和xml转json
项目接口对接中,大部分是传输json格式的数据,但也不排除其它格式的,比如xml,下面给大家提供的是xml和json格式转化的一些方法
XmlBeanUtil类
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import java.io.StringReader;
import java.io.StringWriter;
public class XmlBeanUtil {
/**
* 实体转xml
* @param obj
* @param load
* @return
* @throws JAXBException
*/
public static String beanToXml(Object obj,Class<?> load) throws JAXBException {
JAXBContext context = JAXBContext.newInstance(load);
Marshaller marshaller = context.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.setProperty(Marshaller.JAXB_ENCODING, "utf-8");
marshaller.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
StringWriter writer = new StringWriter();
marshaller.marshal(obj,writer);
return writer.toString();
}
/**
* xml转实体
* @param respXml
* @param load
* @return
* @throws JAXBException
*/
public static Object XmlToBean (String respXml,Class<?> load) throws JAXBException{
JAXBContext context = JAXBContext.newInstance(load);
Unmarshaller unmarshaller = context.createUnmarshaller();
Object object = unmarshaller.unmarshal(new StringReader(respXml));
return object;
}
}
XmlJsonUtils类
import net.sf.json.JSON;
import net.sf.json.JSONSerializer;
import net.sf.json.xml.XMLSerializer;
import java.util.Map;
/**
* JSON(数组)字符串转换成XML字符串
* (必须引入 xom-1.1.jar)
* @param
* @return
*/
public class XmlJsonUtils {
public static String json2xml(String jsonString) {
XMLSerializer xmlSerializer = new XMLSerializer();
xmlSerializer.setTypeHintsEnabled(false); // 去除 节点中type类型
String xml = xmlSerializer.write(JSONSerializer.toJSON(jsonString));
xml = xml.replace("<o>", "").replace("</o>", "");
xml = xml.replaceAll("\r\n", "").concat("\r\n");
return xml;
}
/**
* xml 转 json
* @param
* @return
*/
public static String xml2json(String xmlString) {
XMLSerializer xmlSerializer = new XMLSerializer();
JSON json = xmlSerializer.read(xmlString);
String jsonString= json.toString();
if(jsonString.contains("@")){
jsonString=jsonString.replaceAll("@","");
}
return jsonString;
}
MyJsonUtil 类
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import java.beans.IntrospectionException;
import java.beans.Introspector;
import java.beans.PropertyDescriptor;
import java.math.BigDecimal;
import java.math.BigInteger;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
public class MyJsonUtil {
private static Log log = LogFactory.getLog(MyJsonUtil.class);
public MyJsonUtil() {
}
public static String object2json(Object obj) {
StringBuilder json = new StringBuilder();
if (obj == null) {
json.append("\"\"");
} else if (!(obj instanceof String) && !(obj instanceof Integer) && !(obj instanceof Float) && !(obj instanceof Boolean) && !(obj instanceof Short) && !(obj instanceof Double) && !(obj instanceof Long) && !(obj instanceof BigDecimal) && !(obj instanceof BigInteger) && !(obj instanceof Byte)) {
if (obj instanceof Object[]) {
json.append(array2json((Object[])obj));
} else if (obj instanceof List) {
json.append(list2json((List)obj));
} else if (obj instanceof Map) {
json.append(map2json((Map)obj));
} else if (obj instanceof Set) {
json.append(set2json((Set)obj));
} else {
json.append(bean2json(obj));
}
} else {
json.append("\"").append(string2json(obj.toString())).append("\"");
}
return json.toString();
}
public static String bean2json(Object bean) {
StringBuilder json = new StringBuilder();
json.append("{");
PropertyDescriptor[] props = null;
try {
props = Introspector.getBeanInfo(bean.getClass(), Object.class).getPropertyDescriptors();
} catch (IntrospectionException var7) {
;
}
if (props != null) {
for(int i = 0; i < props.length; ++i) {
try {
String name = object2json(props[i].getName());
String value = object2json(props[i].getReadMethod().invoke(bean));
json.append(name);
json.append(":");
json.append(value);
json.append(",");
} catch (Exception var6) {
;
}
}
json.setCharAt(json.length() - 1, '}');
} else {
json.append("}");
}
return json.toString();
}
public static String list2json(List<?> list) {
StringBuilder json = new StringBuilder();
json.append("[");
if (list != null && list.size() > 0) {
Iterator var3 = list.iterator();
while(var3.hasNext()) {
Object obj = var3.next();
json.append(object2json(obj));
json.append(",");
}
json.setCharAt(json.length() - 1, ']');
} else {
json.append("]");
}
return json.toString();
}
public static String array2json(Object[] array) {
StringBuilder json = new StringBuilder();
json.append("[");
if (array != null && array.length > 0) {
Object[] var5 = array;
int var4 = array.length;
for(int var3 = 0; var3 < var4; ++var3) {
Object obj = var5[var3];
json.append(object2json(obj));
json.append(",");
}
json.setCharAt(json.length() - 1, ']');
} else {
json.append("]");
}
return json.toString();
}
public static String map2json(Map<?, ?> map) {
StringBuilder json = new StringBuilder();
json.append("{");
if (map != null && map.size() > 0) {
Iterator var3 = map.keySet().iterator();
while(var3.hasNext()) {
Object key = var3.next();
json.append(object2json(key));
json.append(":");
json.append(object2json(map.get(key)));
json.append(",");
}
json.setCharAt(json.length() - 1, '}');
} else {
json.append("}");
}
return json.toString();
}
public static String set2json(Set<?> set) {
StringBuilder json = new StringBuilder();
json.append("[");
if (set != null && set.size() > 0) {
Iterator var3 = set.iterator();
while(var3.hasNext()) {
Object obj = var3.next();
json.append(object2json(obj));
json.append(",");
}
json.setCharAt(json.length() - 1, ']');
} else {
json.append("]");
}
return json.toString();
}
public static String string2json(String s) {
if (s == null) {
return "";
} else {
StringBuilder sb = new StringBuilder();
for(int i = 0; i < s.length(); ++i) {
char ch = s.charAt(i);
switch(ch) {
case '\b':
sb.append("\\b");
continue;
case '\t':
sb.append("\\t");
continue;
case '\n':
sb.append("\\n");
continue;
case '\f':
sb.append("\\f");
continue;
case '\r':
sb.append("\\r");
continue;
case '"':
sb.append("\\\"");
continue;
case '/':
sb.append("\\/");
continue;
case '\\':
sb.append("\\\\");
continue;
}
if (ch >= 0 && ch <= 31) {
String ss = Integer.toHexString(ch);
sb.append("\\u");
for(int k = 0; k < 4 - ss.length(); ++k) {
sb.append('0');
}
sb.append(ss.toUpperCase());
} else {
sb.append(ch);
}
}
return sb.toString();
}
}
}
注解的方式对象转xml
@XmlRootElement(name ="Request")
public class SFRequest implements Serializable{
private String service;
private String lang;
private String head;
private SFRequestBody body;
public SFRequest(String service,String lang,String head,SFRequestBody body){
this.service=service;
this.lang=lang;
this.head=head;
this.body=body;
}
public SFRequest(){
super();
}
@XmlAttribute(name="service")
public String getService() {
return service;
}
public void setService(String service) {
this.service = service;
}
@XmlAttribute(name="lang")
public String getLang() {
return lang;
}
public void setLang(String lang) {
if(StringUtils.isBlank(lang)){
this.lang="zh-CN";
}else{
this.lang = lang;
}
}
@XmlElement(name="Head")
public String getHead() {
return head;
}
public void setHead(String head) {
this.head = head;
}
@XmlElement(name="Body")
public SFRequestBody getBody() {
return body;
}
public void setBody(SFRequestBody body) {
this.body = body;
}
- 仔细看
import javax.xml.bind.annotation.XmlElement;
//请求Body
public class SFRequestBody {
private SFOrder sfOrder;
@XmlElement(name="Order")
public SFOrder getSfOrder() {
return sfOrder;
}
public void setSfOrder(SFOrder sfOrder) {
this.sfOrder = sfOrder;
}
public SFRequestBody(){
super();
}
//实体
public SFRequestBody(SFOrder order){
this.sfOrder=order;
}
解释
- @XmlRootElement(name =“Request”)
解析为xml顶部节点 - @XmlAttribute(name=“service”)
解析为xml节点属性 - @XmlElement(name=“Head”)
解析为xml根部节点
测试结果(该结果不是以上代码测的,看了结果大家就会明白注解的功能)
<Request service="RoutePushService" lang="zh-CN">
<Body>
<WaybillRoute id="10049361064087" remark="上门收件" opCode="50"/>
</Body>
</Request>
以上就是转换过程,欢迎大家评论。