Java 如何将根XML节点的子节点转换为json?
我有一个以下格式的文件Java 如何将根XML节点的子节点转换为json?,java,xml,json,Java,Xml,Json,我有一个以下格式的文件 <reports> <report> <text>....</text> <author>...</author> </report> <report> <text>....</text> <author>...</author> </report> </reports&g
<reports>
<report>
<text>....</text>
<author>...</author>
</report>
<report>
<text>....</text>
<author>...</author>
</report>
</reports>
我不知道如何提取XML子项并将它们转换为JSON。因此,我将整个XML文件转换为JSON,然后提取各个报告。那比较容易。以下是我使用的代码:
package test;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.commons.io.IOUtils;
import org.json.JSONArray;
import org.json.JSONObject;
import org.json.XML;
public class Main {
public static void main(String[] args) {
try {
List<String> readLines = IOUtils.readLines(new FileInputStream(new File("test.xml")));
String out = String.join("\n", readLines);
JSONObject jsonObj = XML.toJSONObject(out);
JSONObject reportsObj = (JSONObject) jsonObj.get("reports");
JSONArray reports = (JSONArray) reportsObj.get("report");
int reportCount = reports.length();
for (int i = 0; i < reportCount; i++) {
JSONObject report = (JSONObject) reports.get(i);
System.out.println(report);
}
} catch (IOException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
到底是什么问题?访问XML还是创建JSON?您是否尝试过从创建json表示或任何其他库的JSONObject?请将问题分为两部分。图1显示了如何创建JSON而不必担心XML部分。然后找出如何将两者结合在一起。我有可以将XML文件转换为JSON的代码。然而,在本例中,for循环内部有一个节点对象reports.itemi。我不知道如何将节点对象转换为json。每个节点对象表示一个报表。
package test;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.commons.io.IOUtils;
import org.json.JSONArray;
import org.json.JSONObject;
import org.json.XML;
public class Main {
public static void main(String[] args) {
try {
List<String> readLines = IOUtils.readLines(new FileInputStream(new File("test.xml")));
String out = String.join("\n", readLines);
JSONObject jsonObj = XML.toJSONObject(out);
JSONObject reportsObj = (JSONObject) jsonObj.get("reports");
JSONArray reports = (JSONArray) reportsObj.get("report");
int reportCount = reports.length();
for (int i = 0; i < reportCount; i++) {
JSONObject report = (JSONObject) reports.get(i);
System.out.println(report);
}
} catch (IOException ex) {
Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
}
}
}