Json中含有xml的解析方法

通过MQTT协议传输以下内容,使用fastJson无法解析其中的内容

{
  "msgNo":"2",
  "message":"<root>
        <res>
          <login>
          <info platformName="长度测试" platformType="长度" platformMac="1234"   specificationName="长度" machine="1#"  programVersion="1.2"     unitsVersion="1.2   1.3   1.4"    />
          </login>
        </res>
      </root>"
}

【以下回答由 GPT 生成】

首先,fastJson是一款用于处理JSON数据的Java库,它并不直接支持XML解析。但我们可以尝试将XML转化为JSON后再使用fastJson进行解析。下面是一种可能的解决方案:

  1. 首先,我们需要引入fastJson的依赖。
<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.58</version>
</dependency>
  1. 接下来,我们需要对含有XML的JSON数据进行处理。我们可以使用fastJson的JSON.parseObject方法将JSON字符串转换为JSONObject对象。然后,通过JSONObject的getString方法获取到XML字符串。
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.StringEscapeUtils;

public class Main {
    public static void main(String[] args) {
        String jsonStr = "{\"msgNo\":\"2\",\"message\":\"<root>...</root>\"}";

        JSONObject jsonObject = JSON.parseObject(jsonStr);
        String xmlStr = jsonObject.getString("message");

        // 使用StringEscapeUtils.unescapeHtml4方法对XML进行解码
        xmlStr = StringEscapeUtils.unescapeHtml4(xmlStr);

        System.out.println(xmlStr);
    }
}
  1. 然后,我们可以使用第三方的XML库(比如dom4j或者javax.xml)来解析XML字符串。这里以dom4j为例,首先需要引入dom4j的依赖。
<dependency>
    <groupId>dom4j</groupId>
    <artifactId>dom4j</artifactId>
    <version>1.6.1</version>
</dependency>
  1. 接下来,使用dom4j来解析XML字符串。
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONObject;
import org.apache.commons.lang3.StringEscapeUtils;
import org.dom4j.Document;
import org.dom4j.DocumentException;
import org.dom4j.DocumentHelper;

public class Main {
    public static void main(String[] args) {
        String jsonStr = "{\"msgNo\":\"2\",\"message\":\"<root>...</root>\"}";

        JSONObject jsonObject = JSON.parseObject(jsonStr);
        String xmlStr = jsonObject.getString("message");
        xmlStr = StringEscapeUtils.unescapeHtml4(xmlStr);

        try {
            Document document = DocumentHelper.parseText(xmlStr);

            // 接下来,你可以使用dom4j提供的方法来解析XML内容了
            // 例如: Element rootElement = document.getRootElement();
        } catch (DocumentException e) {
            e.printStackTrace();
            // XML解析出错
        }
    }
}

这就是一种可能的解决方案。希望对你有帮助!如果你有更多问题,请随时向我提问。


如果你已经解决了该问题, 非常希望你能够分享一下解决方案, 写成博客, 将相关链接放在评论区, 以帮助更多的人 ^-^

{
  "msgNo":"2",
  "message":"<root><res><login><info platformName=\"长度测试\" platformType=\"长度\" platformMac=\"1234\"   specificationName=\"长度\" machine=\"1#\"  programVersion=\"1.2\"     unitsVersion=\"1.2   1.3   1.4\"    /></login></res></root>"
}

去掉尖括号之间的空格,标签中属性的引号转义