【问题标题】:Big Data Xml file (file size over 20GB) convert to Json File大数据 Xml 文件(文件大小超过 20GB)转换为 Json 文件
【发布时间】:2014-01-27 15:07:43
【问题描述】:

我有一个 XML 文件。我想用 C# 将它转换为 JSON。但是,XML 文件超过 20 GB。

我尝试使用 XmlReader 读取 XML,然后将每个节点附加到 JSON 文件。我写了以下代码:

var path = @"c:\result.json";
TextWriter tw = new StreamWriter(path, true, Encoding.UTF8);
tw.Write("{\"A\":");

using (XmlTextReader xmlTextReader = new XmlTextReader("c:\\muslum.xml"))
{
    while (xmlTextReader.Read())
    {
        if (xmlTextReader.Name == "A")
        {
            var xmlDoc = new XmlDocument();
            var v = xmlTextReader.ReadInnerXml();

            string json = Newtonsoft.Json.JsonConvert.SerializeXmlNode(xmlDoc, Newtonsoft.Json.Formatting.None, true);

            tw.Write(json);
        }
    }
}

tw.Write("}");
tw.Close();

此代码不起作用。转换 json 时出现错误。有没有最好的方法来执行转换?

【问题讨论】:

  • 你看过 XDocument,你可以用 linq 查询 xml。这将使您的任务更轻松
  • 错误是什么?尝试处理一个较小的文件(假设是两个节点)以查看该 JSON 有什么问题(例如:如果您的循环产生一个数组......它在哪里打开/关闭?)
  • 你有没有试过这个问题的解决方案:stackoverflow.com/questions/7711818/…(双重内容)
  • 这里有一个错误@"c:\\result.json" 你的意思是@"c:\result.json""c:\\result.json"
  • mongo 的文档最大大小为 16MB。您确定要将 20GB 转换为 json 吗?

标签: c# xml json


【解决方案1】:

我会这样做

  • 使用 xsd.exe 从 xsd 架构中生成类

  • 打开文件并一一读取顶级(即您的文档级别)标签(使用 XmlTextReader 或 XmlReader)

  • 使用生成的类将每个标签序列化为对象

  • 将生成的对象反序列化为 json 并保存到任何内容

  • 考虑分批保存 1000-2000 个标签

  • 您说的序列化/反序列化速度很慢是对的。仍然在多个线程中工作,最好使用 TPL 会给你带来很好的速度。还可以考虑使用 json.net 序列化器,它确实比标准的快很多(虽然它是 web.api 的标准)

如果你需要的话,我可以在早上放一些代码 sn-ps。 我们正在以这种方式处理大(1-10gigs)文件,以便将数据保存到 sql server 数据库。

【讨论】:

  • 我是这么想的。但是序列化和反序列化过程需要很长时间。因此,将 xml 导入数据库需要很长时间。我问这个问题找到最快的方法。如果你分享代码 sn-ps,我会很高兴。谢谢
猜你喜欢
  • 1970-01-01
  • 2023-03-09
  • 2012-06-17
  • 1970-01-01
  • 1970-01-01
  • 2019-01-28
  • 1970-01-01
  • 2022-10-19
  • 1970-01-01
相关资源
最近更新 更多