【问题标题】:Converting big JSON-file to XML将大 JSON 文件转换为 XML
【发布时间】:2023-03-09 12:14:01
【问题描述】:

我正在尝试使用转换字符串的 json.org 库将 json 文件转换为 xml。但是,我有一个无法存储在缓存中的大文件,所以我想在转换时写入。有人对我应该怎么做有任何想法吗?

到目前为止:

BufferedReader br = new BufferedReader(new FileReader(FILE_NAME));
private String line;
while((line=br.readLine())!=null){
    JSONObject json = new JSONObject(line));
    String xml = XML.toString(json);
    // Write on OUTPUT_FILE_NAME
}

【问题讨论】:

  • 文件是一个大的 json 对象,还是一大堆较小的对象?
  • 一个大 json 文件 (3gb) @ParrisVarney
  • 能否去掉第一个和最后一个大括号,将子对象一个一个读入内存,构建xml,最后粘贴在一起?
  • @ParrisVarney,谢谢!我将如何实际做到这一点?那不是将所有数据都存储在缓存中吗?
  • 我猜你可以编写一个解析器,逐字节读取文件,并在找到完整的子对象时写入几个小文件。您可以使用类似于您的对象层次结构的目录结构。

标签: java json xml string buffer


【解决方案1】:

如果您没有绑定到json.org,您可以随时尝试使用Jacksonjackson-dataformat-xml 中的json 到xml 支持的低级流。

    JsonFactory jf = new JsonFactory();
    JsonParser jp = jf.createParser(...);

    XmlFactory xf = new XmlFactory();
    JsonGenerator xg = xf.createGenerator(...);

    xg.writeFieldName("root"); // need a root element

    JsonToken t = null;
    while((t = jp.nextToken()) != null) {
        switch(t) {
        case START_OBJECT:
            xg.writeStartObject();
            break;
        case END_OBJECT:
            xg.writeEndObject();
            break;
        case START_ARRAY:
            xg.writeStartArray();
            break;
        case END_ARRAY:
            xg.writeEndArray();
            break;
        case FIELD_NAME:
            xg.writeFieldName(jp.getCurrentName());
            break;
        case VALUE_STRING:
            xg.writeString(jp.getText());
            break;
        case VALUE_FALSE:
            xg.writeBoolean(false);
            break;
        case VALUE_TRUE:
            xg.writeBoolean(true);
            break;
        // some tokens missing here
        }
    }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-01-28
    • 2012-06-17
    • 2017-12-14
    • 2013-01-28
    • 2017-06-18
    • 2016-04-12
    • 1970-01-01
    • 2014-11-11
    相关资源
    最近更新 更多