Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将根XML节点的子节点转换为json?_Java_Xml_Json - Fatal编程技术网

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);
        }
    }
}