【问题标题】:How to convert child nodes of a root XML node to json?如何将根 XML 节点的子节点转换为 json?
【发布时间】:2015-03-28 22:25:10
【问题描述】:

我有一个格式如下的文件

<reports>
  <report>
   <text>....</text>
   <author>...</author>
  </report>
  <report>
   <text>....</text>
   <author>...</author>
  </report>
</reports>

报告根节点包含多个report 节点。我想将所有单独的报告节点转换为 json 对象(我将其保存为单独的文件)。

我是 XML 新手,尝试使用以下代码

    List<String> readLines = IOUtils.readLines(new FileInputStream(new File("file.xml")));
    String out = String.join("\n", readLines);

    //convert to XML
    DocumentBuilderFactory factory = DocumentBuilderFactory.newInstance();
    DocumentBuilder builder;
    try {
        builder = factory.newDocumentBuilder();
        Document doc = builder.parse(new InputSource(new StringReader(out)));
        if (doc != null) {
            XPathExpression expression = XPathFactory.newInstance().newXPath().compile("/reports");
            Node reportsRoot = (Node) expression.evaluate(doc, XPathConstants.NODE);
            NodeList reports = reportsRoot.getChildNodes();
            for (int i = 0; i < reports.getLength(); i++) {
               //I am stuck here. How can I convert the report node into a json object?
            }
        }
    } catch (Exception e) {
        e.printStackTrace();
    }

【问题讨论】:

  • 到底是什么问题?访问 XML 还是创建 JSON?您是否尝试过来自 json.org/java/index.html 的 JSONObject 来创建 json 表示或任何其他库?
  • 把问题分成两部分。了解如何创建 JSON 而无需担心 XML 部分。然后弄清楚如何将两者结合在一起。
  • 我有可以将 XML 文件转换为 JSON 的代码。但是,在这种情况下(在 for 循环内)我拥有的是一个节点对象 reports.item(i)。我不知道如何将节点对象转换为 json。每个节点对象代表一个报表。

标签: java xml json


【解决方案1】:

我不知道如何提取 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);
        }
    }
}

【讨论】:

    猜你喜欢
    • 2014-07-16
    • 1970-01-01
    • 1970-01-01
    • 2011-01-07
    • 2014-07-16
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-06
    相关资源
    最近更新 更多