From 7faa15c39378cc84fa11f864f8b1edb5d059a174 Mon Sep 17 00:00:00 2001 From: YangXikun Date: Mon, 26 Dec 2022 11:07:46 +0800 Subject: [PATCH] =?UTF-8?q?=E4=BF=AE=E5=A4=8DJSON=E8=BD=ACXML=E6=97=B6?= =?UTF-8?q?=EF=BC=8C=E7=94=A8=E6=88=B7=E6=8C=87=E5=AE=9A=E7=9A=84contentKe?= =?UTF-8?q?ys=E5=8F=AA=E5=AF=B9=E6=9C=80=E5=A4=96=E9=9D=A2=E4=B8=80?= =?UTF-8?q?=E5=B1=82=E7=9A=84=E5=85=83=E7=B4=A0=E7=94=9F=E6=95=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../cn/hutool/json/xml/JSONXMLSerializer.java | 8 ++++---- .../test/java/cn/hutool/json/IssueI676IT.java | 20 +++++++++++++++++++ .../src/test/resources/issueI676IT.json | 19 ++++++++++++++++++ 3 files changed, 43 insertions(+), 4 deletions(-) create mode 100644 hutool-json/src/test/java/cn/hutool/json/IssueI676IT.java create mode 100644 hutool-json/src/test/resources/issueI676IT.json diff --git a/hutool-json/src/main/java/cn/hutool/json/xml/JSONXMLSerializer.java b/hutool-json/src/main/java/cn/hutool/json/xml/JSONXMLSerializer.java index fa6dd1e34..b825214cb 100755 --- a/hutool-json/src/main/java/cn/hutool/json/xml/JSONXMLSerializer.java +++ b/hutool-json/src/main/java/cn/hutool/json/xml/JSONXMLSerializer.java @@ -87,13 +87,13 @@ public class JSONXMLSerializer { } else if (value instanceof JSONArray) { for (Object val : (JSONArray) value) { if (val instanceof JSONArray) { - sb.append(wrapWithTag(toXml(val), key)); + sb.append(wrapWithTag(toXml(val, null, contentKeys), key)); } else { - sb.append(toXml(val, key)); + sb.append(toXml(val, key, contentKeys)); } } } else { - sb.append(toXml(value, key)); + sb.append(toXml(value, key, contentKeys)); } }); @@ -111,7 +111,7 @@ public class JSONXMLSerializer { // XML does not have good support for arrays. If an array // appears in a place where XML is lacking, synthesize an // element. - sb.append(toXml(val, tagName == null ? "array" : tagName)); + sb.append(toXml(val, tagName == null ? "array" : tagName, contentKeys)); } return sb.toString(); } diff --git a/hutool-json/src/test/java/cn/hutool/json/IssueI676IT.java b/hutool-json/src/test/java/cn/hutool/json/IssueI676IT.java new file mode 100644 index 000000000..377ece1c0 --- /dev/null +++ b/hutool-json/src/test/java/cn/hutool/json/IssueI676IT.java @@ -0,0 +1,20 @@ +package cn.hutool.json; + +import cn.hutool.core.io.resource.ResourceUtil; +import cn.hutool.core.util.XmlUtil; +import cn.hutool.json.xml.JSONXMLSerializer; +import org.junit.Assert; +import org.junit.Test; + +import static javax.xml.xpath.XPathConstants.STRING; + +public class IssueI676IT { + + @Test + public void parseXMLTest() { + final JSONObject jsonObject = JSONUtil.parseObj(ResourceUtil.readUtf8Str("issueI676IT.json")); + String xmlStr = JSONXMLSerializer.toXml(jsonObject, null, (String) null); + String content = String.valueOf(XmlUtil.getByXPath("/page/orderItems[1]/content", XmlUtil.readXML(xmlStr), STRING)); + Assert.assertEquals(content, "bar1"); + } +} diff --git a/hutool-json/src/test/resources/issueI676IT.json b/hutool-json/src/test/resources/issueI676IT.json new file mode 100644 index 000000000..7102d5c64 --- /dev/null +++ b/hutool-json/src/test/resources/issueI676IT.json @@ -0,0 +1,19 @@ +{ + "page": { + "pageSize": 33, + "currentPage": 81, + "totalSize": 49, + "orderItems": [ + { + "asc": true, + "columnName": "foo", + "content": "bar1" + }, + { + "asc": false, + "columnName": "foo", + "content": "bar2" + } + ] + } +}