java实体在xml和json之间相互转换

今天药忘吃喽~ 2023-10-17 21:48 93阅读 0赞

在我们Java开发 接口调试过程中 经常会遇到 实体转换长json、xml 或者json 转换成实体、xml 等多种情况,今天博主给大家详细举例:

  1. 1、原生实体与json 相互转换:
  2. User user = new User();
  3. HashMap<String, Object> paramMap = new HashMap<String,Object>();
  4. String requestString = JSON.toJSONString(paramMap);
  5. ReturnInfo returnInfo = JSON.parseObject(result, ReturnInfo.class);//
  6. result 字符串为json retrunInfo.class 为实体类

2、

  1. import java.util.ArrayList;
  2. import java.util.HashMap;
  3. import java.util.Iterator;
  4. import java.util.List;
  5. import java.util.Map;
  6. import java.util.StringTokenizer;
  7. import net.sf.json.JSONArray;
  8. import net.sf.json.JSONObject;
  9. /**
  10. * JSOn工具类
  11. */
  12. @SuppressWarnings("unchecked")
  13. public class JSONUtils {
  14. /**
  15. * 生成json数组
  16. * @param datasJSON
  17. * @return
  18. */
  19. public static JSONArray createJSONArray(String datasJSON){
  20. String datas = JSONUtils.json2String(datasJSON, "datas");
  21. JSONArray results = new JSONArray();;
  22. JSONArray datasJSONArray = JSONArray.fromObject(datas);
  23. Iterator<JSONObject> iterator = datasJSONArray.iterator();
  24. while(iterator.hasNext()){
  25. JSONObject data = (JSONObject) iterator.next();
  26. JSONObject eachDataObject = data.getJSONObject("data");
  27. results.element(eachDataObject);
  28. }
  29. return results;
  30. }
  31. /**
  32. * 生成jsonobject
  33. * @param datasJSON
  34. * @return
  35. */
  36. @SuppressWarnings("rawtypes")
  37. public static List<JSONObject> createJSONObjects(String datasJSON){
  38. List<JSONObject> results = new ArrayList<JSONObject>();
  39. String datas = JSONUtils.json2String(datasJSON, "datas");
  40. JSONArray jsonArray = JSONArray.fromObject(datas);
  41. Iterator iterator = jsonArray.iterator();
  42. while(iterator.hasNext()){
  43. JSONObject data = (JSONObject) iterator.next();
  44. JSONObject eachDataObject = data.getJSONObject("data");
  45. results.add(eachDataObject);
  46. }
  47. return results;
  48. }
  49. /**
  50. * 另一种生成jsonObject 方法
  51. * @param datasJSON
  52. * @return
  53. */
  54. @SuppressWarnings("rawtypes")
  55. public static JSONObject createJSONObject(String datasJSON){
  56. JSONObject result = new JSONObject();
  57. String datas = JSONUtils.json2String(datasJSON, "datas");
  58. JSONArray jsonArray = JSONArray.fromObject(datas);
  59. Iterator iterator = jsonArray.iterator();
  60. while(iterator.hasNext()){
  61. JSONObject data = (JSONObject) iterator.next();
  62. JSONObject eachDataObject = data.getJSONObject("data");
  63. result = eachDataObject;
  64. }
  65. return result;
  66. }
  67. /**
  68. * json转换成list
  69. * @param json the json
  70. * @return List<Map>
  71. *
  72. */
  73. public static List<Map<String,Object>> jsonToList(String json) {
  74. List<Map<String,Object>> listMap = new ArrayList<Map<String,Object>>();
  75. String JSON = json.substring(1, json.length() - 1);
  76. JSON = JSON.replaceAll("},", "}^");
  77. StringTokenizer strTokenizer = new StringTokenizer(JSON, "^");
  78. while (strTokenizer.hasMoreTokens()) {
  79. String token = strTokenizer.nextToken();
  80. Map<String,Object> paraMap =getMap4Json(token);
  81. listMap.add(paraMap);
  82. }
  83. return listMap;
  84. }
  85. /**
  86. * map转换成json
  87. *
  88. * @param jsonString the json string
  89. * @return the 4Json
  90. *
  91. */
  92. public static Map<String,Object> getMapToJson(String jsonString) {
  93. JSONObject jsonObject = JSONObject.fromObject(jsonString);
  94. String key;
  95. Object value;
  96. Map<String,Object> valueMap = new HashMap<String,Object>();
  97. Iterator<String> keyIter = jsonObject.keys();
  98. while (keyIter.hasNext()) {
  99. key =keyIter.next();
  100. value = String.valueOf(jsonObject.get(key));
  101. valueMap.put(key, value);
  102. }
  103. return valueMap;
  104. }
  105. /**
  106. * string 转换成json字符串
  107. *
  108. * @param key the key
  109. * @param value the value
  110. * @return {a:1,b:8}
  111. *
  112. */
  113. public static String stringTojson(String key, String value) {
  114. JSONObject object = new JSONObject();
  115. object.put(key, value);
  116. return object.toString();
  117. }
  118. /**
  119. * json转换成数组
  120. * @param json the json
  121. * @param valueClz the value clz
  122. * @return
  123. *
  124. */
  125. public static Object jsonToArray(String json, Class<?> valueClz) {
  126. JSONArray jsonArray = JSONArray.fromObject(json);
  127. return JSONArray.toArray(jsonArray, valueClz);
  128. }
  129. /**
  130. * object转换成json
  131. *
  132. * @param object the object
  133. * @return the string
  134. * @param:objec
  135. */
  136. public static String collectionTojson(Object object) {
  137. JSONArray jsonArray = JSONArray.fromObject(object);
  138. return jsonArray.toString();
  139. }
  140. /**
  141. * map转JSON.
  142. *
  143. * @param object the object
  144. * @return the string
  145. *
  146. */
  147. public static String mapTojson(Map<String,Object> object) {
  148. JSONObject jsonObject = JSONObject.fromObject(object);
  149. return jsonObject.toString();
  150. }
  151. /**
  152. * json转map
  153. *
  154. */
  155. @SuppressWarnings("rawtypes")
  156. public static Map jsonToMap(Object[] keyArray, String json, Class<?> valueClz) {
  157. JSONObject jsonObject = JSONObject.fromObject(json);
  158. Map classMap = new HashMap();
  159. for (int i = 0; i < keyArray.length; i++) {
  160. classMap.put(keyArray[i], valueClz);
  161. }
  162. return (Map) JSONObject.toBean(jsonObject, Map.class, classMap);
  163. }
  164. /**
  165. * 实体转换jSON.
  166. *
  167. * @param object the object
  168. * @return the string
  169. *
  170. */
  171. public static String beanTojson(Object object) {
  172. JSONObject jsonObject = JSONObject.fromObject(object);
  173. return jsonObject.toString();
  174. }
  175. /**
  176. * json转object
  177. *
  178. */
  179. @SuppressWarnings("rawtypes")
  180. public static Object jsonToObject(String json, Class beanClz) {
  181. return JSONObject.toBean(JSONObject.fromObject(json), beanClz);
  182. }
  183. /**
  184. * json转string
  185. */
  186. public static String jsonToString(String json, String key) {
  187. JSONObject jsonObject = JSONObject.fromObject(json);
  188. return jsonObject.get(key).toString();
  189. }
  190. /**
  191. * list转json
  192. *
  193. */
  194. @SuppressWarnings("rawtypes")
  195. public static String listTojson(List list){
  196. JSONArray jsonArray2 = JSONArray.fromObject(list);
  197. return jsonArray2.toString();
  198. }
  199. }

日常开发常用json转换 工具类:比如

  1. Result info = (Result) JSONUtils.jsonToObject(result,Result.class);//json转实体
  2. String bean2json = JSONUtils.beanTojson(map);//实体转json

3、xml转换相关

  1. String str=xml+XmlUtils.toXml(packet);
  2. xml工具类:
  3. import java.io.File;
  4. import java.io.InputStream;
  5. import java.text.DateFormat;
  6. import java.text.ParseException;
  7. import java.text.SimpleDateFormat;
  8. import java.util.Date;
  9. import com.jingyou.application.cases.dto.custom.mps.MPSMainInfoDTO;
  10. import com.jingyou.application.cases.dto.custom.mps.QueryConditionDTO;
  11. import com.thoughtworks.xstream.XStream;
  12. import com.thoughtworks.xstream.converters.Converter;
  13. import com.thoughtworks.xstream.converters.MarshallingContext;
  14. import com.thoughtworks.xstream.converters.UnmarshallingContext;
  15. import com.thoughtworks.xstream.io.HierarchicalStreamReader;
  16. import com.thoughtworks.xstream.io.HierarchicalStreamWriter;
  17. import com.thoughtworks.xstream.io.xml.DomDriver;
  18. /**
  19. *
  20. * ClassName:SerializeUtils Reason: 基于xstream的xml序列化工具类
  21. */
  22. @SuppressWarnings("unchecked")
  23. public class XmlUtils {
  24. private static XStream getXStream(Class clazz) {
  25. // dom方式解析
  26. XStream xstream = new XStream();
  27. // 开启注解检查,指定注解类
  28. xstream.processAnnotations(clazz);
  29. // 注册日期对象的转换器
  30. xstream.registerConverter(new Converter() {
  31. // Date → String
  32. public void marshal(Object arg0, HierarchicalStreamWriter arg1, MarshallingContext arg2) {
  33. DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
  34. arg1.setValue(dateFormat.format((Date) arg0));
  35. }
  36. // String → Date
  37. public Object unmarshal(HierarchicalStreamReader arg0, UnmarshallingContext arg1) {
  38. SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  39. if(!"".equals(arg0.getValue())){
  40. if(arg0.getValue().length() < 19){
  41. dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
  42. }
  43. if(arg0.getValue().length() < 11){
  44. dateFormat = new SimpleDateFormat("yyyy-MM-dd");
  45. }
  46. try {
  47. return dateFormat.parse(arg0.getValue());
  48. } catch (ParseException e) {
  49. e.printStackTrace();
  50. throw new RuntimeException(e.getCause());
  51. }
  52. }else{
  53. return null;
  54. }
  55. }
  56. // 对Date类型转换
  57. public boolean canConvert(Class arg0) {
  58. return arg0.equals(Date.class);
  59. }
  60. });
  61. return xstream;
  62. }
  63. private static XStream getXStreamNew(Class clazz, String aliasName) {
  64. // dom方式解析
  65. XStream xstream = new XStream();
  66. // 动态修改类注解
  67. if(aliasName != null && !"".equals(aliasName)){
  68. xstream.alias(aliasName, clazz);
  69. }
  70. // 开启注解检查,指定注解类
  71. xstream.processAnnotations(clazz);
  72. // 注册日期对象的转换器
  73. xstream.registerConverter(new Converter() {
  74. // Date → String
  75. public void marshal(Object arg0, HierarchicalStreamWriter arg1, MarshallingContext arg2) {
  76. DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
  77. arg1.setValue(dateFormat.format((Date) arg0));
  78. }
  79. // String → Date
  80. public Object unmarshal(HierarchicalStreamReader arg0, UnmarshallingContext arg1) {
  81. SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
  82. if(!"".equals(arg0.getValue())){
  83. if(arg0.getValue().length() < 19){
  84. dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm");
  85. }
  86. if(arg0.getValue().length() < 11){
  87. dateFormat = new SimpleDateFormat("yyyy-MM-dd");
  88. }
  89. try {
  90. return dateFormat.parse(arg0.getValue());
  91. } catch (ParseException e) {
  92. e.printStackTrace();
  93. throw new RuntimeException(e.getCause());
  94. }
  95. }else{
  96. return null;
  97. }
  98. }
  99. // 对Date类型转换
  100. public boolean canConvert(Class arg0) {
  101. return arg0.equals(Date.class);
  102. }
  103. });
  104. return xstream;
  105. }
  106. public static String toXml(Object obj) {
  107. String xml = getXStream(obj.getClass()).toXML(obj);
  108. xml = xml.replaceAll("__", "_"); // xstream的bug,应避免使用下划线作为连接符
  109. return xml;
  110. }
  111. public static String toXmlNew(Object obj, String aliasName){
  112. String xml = getXStreamNew(obj.getClass(), aliasName).toXML(obj);
  113. xml = xml.replaceAll("__", "_"); // xstream的bug,应避免使用下划线作为连接符
  114. return xml;
  115. }
  116. public static <T> T fromXmlNew(String xml, Class<T> clazz, String aliasName) {
  117. T t = (T) getXStreamNew(clazz, aliasName).fromXML(xml);
  118. return t;
  119. }
  120. public static <T> T fromXml(String xml, Class<T> clazz) {
  121. T t = (T) getXStream(clazz).fromXML(xml);
  122. return t;
  123. }
  124. public static <T> T fromXml(File xml, Class<T> clazz) {
  125. T t = (T) getXStream(clazz).fromXML(xml);
  126. return t;
  127. }
  128. public static <T> T fromXml(InputStream xml, Class<T> clazz) {
  129. T t = (T) getXStream(clazz).fromXML(xml);
  130. return t;
  131. }
  132. }
  133. java开发中肯定有所帮助,如果有疑问可以留言:我会及时帮你解决

发表评论

表情:
评论列表 (有 0 条评论,93人围观)

还没有评论,来说两句吧...

相关阅读