Java進級のXML回転JSON
5552 ワード
インタフェーステストでも開発でも、インタフェースから戻ってきたデータがXMLタイプであることに遭遇することがあります.この場合、XML転送Java Beanを単独で書きたくありません.なぜなら、XMLが戻り結果として相対的にJSONほど主流ではなく、JSONフィールドで設計されたBeanオブジェクト属性がXMLに一致するとは限らないため、XMLをJSONに変換した後、解析JSONを押して処理しました.この間、ちょうどこのような需要に出会って、実現方法をみんなに分かち合いました.
依存関係
maven管理依存に基づいてpomファイルに次のdependencyを加え、JSON用アリのfastjsonを解析し、xml用jdomを解析する必要がある.
へんかんろんり
XML 2 JSONツールクラスがカプセル化されています.
テストを走って変換効果を見ます.
直接生産を完走したJSON:
PS:XML形式は標準(ラベルはペアで表示)でなければ解析できない可能性があり、複雑なHTMLページをテストすると変換に失敗します.
原文は下の公衆番号から来て、転載は作者に連絡して、そして必ず出典を保留してください.最初の時間にもっとオリジナルの技術の良い文と資料を見たいなら、公衆番号に注目してください:テスト開発スタック
依存関係
maven管理依存に基づいてpomファイルに次のdependencyを加え、JSON用アリのfastjsonを解析し、xml用jdomを解析する必要がある.
com.alibaba
fastjson
1.2.32
org.jdom
jdom
2.0.2
へんかんろんり
XML 2 JSONツールクラスがカプセル化されています.
import org.apache.commons.lang.StringUtils;
import org.jdom2.Document;
import org.jdom2.JDOMException;
import com.alibaba.fastjson.JSONObject;
import org.jdom2.Element;
import org.jdom2.input.SAXBuilder;
import java.io.ByteArrayInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.util.LinkedList;
import java.util.List;
/**
* Created by alany on 2018/7/10.
*/
public class XmlUtils {
public static JSONObject xml2Json(String xmlStr) throws JDOMException, IOException {
if (StringUtils.isEmpty(xmlStr)) {
return null;
}
xmlStr = xmlStr.replaceAll("\\
", "");
byte[] xml = xmlStr.getBytes("UTF-8");
JSONObject json = new JSONObject();
InputStream is = new ByteArrayInputStream(xml);
SAXBuilder sb = new SAXBuilder();
Document doc = sb.build(is);
Element root = doc.getRootElement();
json.put(root.getName(), iterateElement(root));
return json;
}
private static JSONObject iterateElement(Element element) {
List node = element.getChildren();
JSONObject obj = new JSONObject();
List list = null;
for (Element child : node) {
list = new LinkedList();
String text = child.getTextTrim();
if (StringUtils.isBlank(text)) {
if (child.getChildren().size() == 0) {
continue;
}
if (obj.containsKey(child.getName())) {
list = (List) obj.get(child.getName());
}
list.add(iterateElement(child)); // child
obj.put(child.getName(), list);
} else {
if (obj.containsKey(child.getName())) {
Object value = obj.get(child.getName());
try {
list = (List) value;
} catch (ClassCastException e) {
list.add(value);
}
}
if (child.getChildren().size() == 0) { //child text
obj.put(child.getName(), text);
} else {
list.add(text);
obj.put(child.getName(), list);
}
}
}
return obj;
}
}
テストを走って変換効果を見ます.
@Test
public void test() throws JDOMException, IOException {
String xml = "
" +
"
" +
"
" +
"
" +
"
" +
"
" +
"
" +
"
" +
"
" +
"
" +
"
" +
"
" +
"
" +
"
" +
"
" +
"
" +
"
" +
"
" +
"
" +
"
" +
"
";
JSONObject json = xml2Json(xml);
System.out.println(json.toJSONString());
}
直接生産を完走したJSON:
{
"sitemapindex":{
"sitemaps":[
{
"sitemap":[
{
"loc":"[http://qq.com/xml/_46.xml](http://qq.com/xml/_46.xml)",
"lastmod":"2018-06-20 01:28:09"
},
{
"loc":"[http://qq.com/xml/_47.xml](http://qq.com/xml/_47.xml)",
"lastmod":"2018-06-25 01:28:09"
}
]
}
],
"sitemap":[
{
"loc":"[http://qq.com/xml/_1.xml](http://qq.com/xml/_1.xml)",
"lastmod":"2018-06-20 01:28:09"
},
{
"loc":"[http://qq.com/xml/_2.xml](http://qq.com/xml/_2.xml)",
"lastmod":"2018-06-20 01:28:09"
}
]
}
}
PS:XML形式は標準(ラベルはペアで表示)でなければ解析できない可能性があり、複雑なHTMLページをテストすると変換に失敗します.
原文は下の公衆番号から来て、転載は作者に連絡して、そして必ず出典を保留してください.最初の時間にもっとオリジナルの技術の良い文と資料を見たいなら、公衆番号に注目してください:テスト開発スタック