XML字符串转换为Json字符串和XML字符串转换为Java对象

谁践踏了优雅 2024-04-23 02:46 187阅读 0赞

记录:384

场景:把XML字符串转换为Json字符串。把XML字符串转换为Java对象。

版本:JDK 1.8

1.XML转换为JSON字符串

1.1引用Jar

Jar包:hutool-all-5.8.12.jar

类位置:cn.hutool.json.XML

1.2自定义封装方法

  1. public static String parseXml2JSONString(String xmlStr){
  2. JSONObject jsonObject = XML.toJSONObject(xmlStr);
  3. return jsonObject.toString();
  4. }

2.XML字符串转换为Java对象

2.1引用Jar

Jar包:rt.jar,jdk 1.8自带包。

类位置:

javax.xml.bind.JAXBContext

javax.xml.bind.Unmarshaller

2.2自定义封装方法

  1. public static <T> T parseXml2Object(String xmlStr,Class<T> targetClass){
  2. JAXBContext jaxbContext = null;
  3. try {
  4. jaxbContext = JAXBContext.newInstance(targetClass);
  5. Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
  6. return (T) unmarshaller.unmarshal(new StringReader(xmlStr));
  7. } catch (JAXBException e) {
  8. e.printStackTrace();
  9. }
  10. return null;
  11. }

3.测试main方法

3.1.main方法

在main方法做测试验证。

  1. public static void main(String[] args) throws JAXBException {
  2. String xml01 = getXml01();
  3. String xml02 = getXml02();
  4. //1.测试xml字符串转换为JSON字符串
  5. log.info("xml01转换为Json字符串:");
  6. log.info(parseXml2JSONString(xml01).toString());
  7. log.info("xml02转换为Json字符串:");
  8. log.info(parseXml2JSONString(xml02).toString());
  9. //2.测试xml字符串转换为Java对象
  10. log.info("xml01转换为Java对象:");
  11. DataDTO dataDTO =parseXml2Object(xml01,DataDTO.class);
  12. log.info(dataDTO.toString());
  13. log.info("xml02转换为Java对象:");
  14. DataListDTO dataListDTO =parseXml2Object(xml01,DataListDTO.class);
  15. log.info(dataListDTO.toString());
  16. }

3.2.XML字符串

(1)字符串一

  1. <province>
  2. <provinceId>1</provinceId>
  3. <provinceName>浙江省</provinceName>
  4. <landArea>105500</landArea>
  5. <population>6577</population>
  6. <gross>7.77</gross>
  7. <city>
  8. <cityId>1</cityId>
  9. <cityName>杭州</cityName>
  10. <landArea>16850</landArea>
  11. <population>1237</population>
  12. <gross>1.88</gross>
  13. <cityDescribe>杭州是一个好城市</cityDescribe>
  14. <dataYear>2022</dataYear>
  15. <updateTime>2023-03-12 15:58:59</updateTime>
  16. </city>
  17. </province>

(2)字符串二

  1. <province>
  2. <provinceId>1</provinceId>
  3. <provinceName>浙江省</provinceName>
  4. <landArea>105500</landArea>
  5. <population>6577</population>
  6. <gross>7.77</gross>
  7. <city>
  8. <cityId>1</cityId>
  9. <cityName>杭州</cityName>
  10. <landArea>16850</landArea>
  11. <population>1237</population>
  12. <gross>1.81</gross>
  13. <cityDescribe>杭州是一个好城市</cityDescribe>
  14. <dataYear>2021</dataYear>
  15. <updateTime>2023-03-12 15:58:59</updateTime>
  16. </city>
  17. <city>
  18. <cityId>2</cityId>
  19. <cityName>杭州</cityName>
  20. <landArea>16850</landArea>
  21. <population>1237</population>
  22. <gross>1.88</gross>
  23. <cityDescribe>杭州是一个好城市</cityDescribe>
  24. <dataYear>2022</dataYear>
  25. <updateTime>2023-03-12 15:58:59</updateTime>
  26. </city>
  27. </province>

4.支撑对象和数据

4.1获取数据方法getXml01()

  1. public static String getXml01(){
  2. return "<province>\n" +
  3. " <provinceId>1</provinceId>\n" +
  4. " <provinceName>浙江省</provinceName>\n" +
  5. " <landArea>105500</landArea>\n" +
  6. " <population>6577</population>\n" +
  7. " <gross>7.77</gross>\n" +
  8. " <city>\n" +
  9. " <cityId>1</cityId>\n" +
  10. " <cityName>杭州</cityName>\n" +
  11. " <landArea>16850</landArea>\n" +
  12. " <population>1237</population>\n" +
  13. " <gross>1.88</gross>\n" +
  14. " <cityDescribe>杭州是一个好城市</cityDescribe>\n" +
  15. " <dataYear>2022</dataYear>\n" +
  16. "\t\t<updateTime>2023-03-12 15:58:59</updateTime>\n" +
  17. " </city>\n" +
  18. "</province>";
  19. }

4.2获取数据方法getXml02()

  1. public static String getXml02(){
  2. return "<province>\n" +
  3. " <provinceId>1</provinceId>\n" +
  4. " <provinceName>浙江省</provinceName>\n" +
  5. " <landArea>105500</landArea>\n" +
  6. "\t<population>6577</population>\n" +
  7. " <gross>7.77</gross>\n" +
  8. " <city>\n" +
  9. " <cityId>1</cityId>\n" +
  10. " <cityName>杭州</cityName>\n" +
  11. " <landArea>16850</landArea>\n" +
  12. " <population>1237</population>\n" +
  13. " <gross>1.81</gross>\n" +
  14. " <cityDescribe>杭州是一个好城市</cityDescribe>\n" +
  15. " <dataYear>2021</dataYear>\n" +
  16. "\t\t<updateTime>2023-03-12 15:58:59</updateTime>\n" +
  17. " </city>\n" +
  18. "\t<city>\n" +
  19. " <cityId>2</cityId>\n" +
  20. " <cityName>杭州</cityName>\n" +
  21. " <landArea>16850</landArea>\n" +
  22. " <population>1237</population>\n" +
  23. " <gross>1.88</gross>\n" +
  24. " <cityDescribe>杭州是一个好城市</cityDescribe>\n" +
  25. " <dataYear>2022</dataYear>\n" +
  26. "\t\t<updateTime>2023-03-12 15:58:59</updateTime>\n" +
  27. " </city>\n" +
  28. "</province>";
  29. }

4.3 DataListDTO对象

  1. @Data
  2. @XmlAccessorType(XmlAccessType.FIELD)
  3. @XmlRootElement(name = "province")
  4. @XmlType( propOrder ={"provinceId","provinceName","landArea","population","gross","city"})
  5. public class DataListDTO implements Serializable {
  6. private Long provinceId;
  7. private String provinceName;
  8. private Double landArea;
  9. private Long population;
  10. private Double gross;
  11. private List<CityDTO> city;
  12. }

4.4DataDTO对象

  1. @Data
  2. @XmlAccessorType(XmlAccessType.FIELD)
  3. @XmlRootElement(name = "province")
  4. @XmlType( propOrder ={"provinceId","provinceName","landArea","population","gross","city"})
  5. public class DataDTO implements Serializable {
  6. private Long provinceId;
  7. private String provinceName;
  8. private Double landArea;
  9. private Long population;
  10. private Double gross;
  11. private CityDTO city;
  12. }

4.5CityDTO对象

  1. @Data
  2. public class CityDTO implements Serializable {
  3. private Long cityId;
  4. private String cityName;
  5. private Double landArea;
  6. private Long population;
  7. private Double gross;
  8. private String cityDescribe;
  9. private String dataYear;
  10. private String updateTime;
  11. }

以上,感谢。

2023年3月12日

发表评论

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

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

相关阅读