问题描述
使用Hutool 5.8.24包,将XML转化为JSON时,包含形似科学技术法的字符串会被解析成科学记数法,从而无法获得形似科学技术法的字符串。
Pom引入Hutool 5.8.24包:
<dependency>
<groupId>cn.hutool</groupId>
<artifactId>hutool-all</artifactId>
<version>5.8.24</version>
</dependency>
问题还原
待XML字符串的内容如下:
<Request>
<Desc>304000e1</Desc>
</Request>
使用Hutool 5.8.24包解析XML代码:
import cn.hutool.json.JSONObject;
import cn.hutool.json.JSONUtil;
import org.junit.Test;
public class ApiTest {
public static String XMLStr1 = "<Request><Desc>304000e1</Desc></Request>";
@Test
public void XMLTesthutool() {
JSONObject jsonObject = JSONUtil.parseFromXml(XMLStr1);
JSONObject request = jsonObject.getJSONObject("Request");
System.out.println(jsonObject.get("Request").toString());
System.out.println(request.getStr("Desc").toString());
}
}
运行效果截图:
解决方法
方式一:使用Hutool的XML方法解析
修改Hutool解析XML代码:
@Test
public void XMLTestHutool() {
// JSONObject jsonObject = JSONUtil.parseFromXml(XMLStr1);
/* XML.toJSONObject(XMLStr1, true); 第一个参数 -- XML字符串;第二个参数 -- 是否保持字符串格式 */
JSONObject jsonObject = XML.toJSONObject(XMLStr1, true);
JSONObject request = jsonObject.getJSONObject("Request");
System.out.println(jsonObject.get("Request").toString());
System.out.println(request.getStr("Desc"));
}
- XML.toJSONObject():第二个参数必须要为true,才能保留字符串格式。
运行效果截图:
方式二:使用Hutool的Dom解析
使用Hutool解析XML代码:
@Test
public void XMLTestHutool() {
Document document = XmlUtil.parseXml(XMLStr1);
String desc = document.getElementsByTagName("Desc").item(0).getTextContent();
System.out.println("Desc节点值:" + desc);
}
运行效果截图:
方式三:使用原生Dom解析
使用Dom解析XML代码:
import org.junit.Test;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.DocumentBuilderFactory;
import java.io.StringReader;
public class ApiTest {
public static String XMLStr1 = "<Request><Desc>304000e1</Desc></Request>";
@Test
public void XMLTestDom() {
try {
DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
DocumentBuilder builder = factory.newDocumentBuilder();
Document document = builder.parse(new InputSource(new StringReader(XMLStr1)));
document.getDocumentElement().normalize();
String desc = document.getElementsByTagName("Desc").item(0).getTextContent();
System.out.println("Desc节点值:" + desc);
} catch (Exception e) {
e.printStackTrace();
}
}
}
运行效果截图:
问题总结
- 在数据格式转化过程中,为了要保证数据值的格式前后要一致。
评论区