Java调用Http接口返回的xml格式数据,解析成Json格式

第一中方法就是自己写转换类

先用SAXReader和Document得到xml格式的数据

@RequestMapping(value = "web_service_url", method = RequestMethod.GET)
public String GetAllNotAcceptedCaseList(){

    String webServiceUrl=GlobalUtils.getConfig("web_service_url");   //读取配置文件中配置的接口路径,也可直接写死
    try {
        SAXReader reader = new SAXReader();
        Document document = reader.read(new URL(webServiceUrl));        //
        //获取根节点
        Element rootElement = document.getRootElement();
        Object data =rootElement.getData();
        JSONObject jsonObject = xmltoJson(data.toString());         //转成的json数据
        System.out.println(jsonObject);
    } catch (Exception e) {
        e.printStackTrace();
    }
    return "";
}

转换工具类

/**
 * 将xml转换为JSON对象
 * @param xml xml字符串
 * @return
 * @throws Exception
 */
public static JSONObject xmltoJson(String xml) throws Exception {
    JSONObject jsonObject = new JSONObject();
    Document document = DocumentHelper.parseText(xml);
    //获取根节点元素对象
    Element root = document.getRootElement();
    iterateNodes(root, jsonObject);
    return jsonObject;
}

/**
 * 遍历元素
 * @param node 元素
 * @param json 将元素遍历完成之后放的JSON对象
 */
@SuppressWarnings("unchecked")
public static void iterateNodes(Element node,JSONObject json){
    //获取当前元素的名称
    String nodeName = node.getName();
    //判断已遍历的JSON中是否已经有了该元素的名称
    if(json.containsKey(nodeName)){
        //该元素在同级下有多个
        Object Object = json.get(nodeName);
        JSONArray array = null;
        if(Object instanceof JSONArray){
            array = (JSONArray) Object;
        }else {
            array = new JSONArray();
            array.add(Object);
        }
        //获取该元素下所有子元素
        List<Element> listElement = node.elements();
        if(listElement.isEmpty()){
            //该元素无子元素,获取元素的值
            String nodeValue = node.getTextTrim();
            array.add(nodeValue);
            json.put(nodeName, array);
            return ;
        }
        //有子元素
        JSONObject newJson = new JSONObject();
        //遍历所有子元素
        for(Element e:listElement){
            //递归
            iterateNodes(e,newJson);
        }
        array.add(newJson);
        json.put(nodeName, array);
        return ;
    }
    //该元素同级下第一次遍历
    //获取该元素下所有子元素
    List<Element> listElement = node.elements();
    if(listElement.isEmpty()){
        //该元素无子元素,获取元素的值
        String nodeValue = node.getTextTrim();
        json.put(nodeName, nodeValue);
        return ;
    }
    //有子节点,新建一个JSONObject来存储该节点下子节点的值
    JSONObject object = new JSONObject();
    //遍历所有一级子节点
    for(Element e:listElement){
        //递归
        iterateNodes(e,object);
    }
    json.put(nodeName, object);
    return ;
}

第二种方法就是使用json-lib.jar的方式转换

//创建 XMLSerializer对象
XMLSerializer xmlSerializer = new XMLSerializer();
//将xml转为json(注:如果是元素的属性,会在json里的key前加一个@标识)
String result = xmlSerializer.read(xml).toString();
//输出json内容
System.out.println(result);

测试类

public static void main(String[] args) {
   String xml = "<class id="+ "'1'"+ "><student><name>aaaaaa</name><age>21</age></student><student><name>bbbbbb</name><age>22</age></student></class>";
   //创建 XMLSerializer对象
   XMLSerializer xmlSerializer = new XMLSerializer();
   //将xml转为json(注:如果是元素的属性,会在json里的key前加一个@标识)
   String result = xmlSerializer.read(xml).toString();
   //输出json内容
   System.out.println(result);
}
  • 0
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Java 中接收 XML 格式的参数并解析 JSONObject 和实体,你可以使用一些第三方库来完。以下是一个示例代码: ```java import org.json.JSONObject; import org.json.XML; import javax.xml.bind.JAXBContext; import javax.xml.bind.JAXBException; import javax.xml.bind.Unmarshaller; import java.io.StringReader; public class XmlParser { public static JSONObject parseXmlToJson(String xml) { int PRETTY_PRINT_INDENT_FACTOR = 4; JSONObject jsonObject = XML.toJSONObject(xml); String jsonOutput = jsonObject.toString(PRETTY_PRINT_INDENT_FACTOR); return new JSONObject(jsonOutput); } public static <T> T parseXmlToEntity(String xml, Class<T> entityClass) throws JAXBException { JAXBContext jaxbContext = JAXBContext.newInstance(entityClass); Unmarshaller unmarshaller = jaxbContext.createUnmarshaller(); StringReader reader = new StringReader(xml); return (T) unmarshaller.unmarshal(reader); } } ``` 上述代码使用了两个库,一个是 `org.json.XML` 来将 XML 解析JSONObject,另一个是 Java 自带的 JAXB(Java Architecture for XML Binding)库来将 XML 解析为实体对象。 在 `parseXmlToJson` 方法中,首先将 XML 字符串转换为 JSONObject 对象,然后将其格式化为要求的输出格式。 在 `parseXmlToEntity` 方法中,首先创建一个 JAXBContext 对象,然后创建一个 Unmarshaller 对象,接着使用 StringReader 将 XML 字符串转换为 Reader 对象,最后使用 unmarshaller 对象将 Reader 转换为实体对象。 你可以根据自己的需求调用这两个方法来解析 XML 参数。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值