返回顶部
首页 > 资讯 > 后端开发 > GO >使用 to 把庞大的 XML 文件转换成 JSON 格式,以便存储在 MongoDB 数据库中
  • 433
分享到

使用 to 把庞大的 XML 文件转换成 JSON 格式,以便存储在 MongoDB 数据库中

2024-04-04 23:04:09 433人浏览 安东尼
摘要

golang小白一枚,正在不断学习积累知识,现将学习到的知识记录一下,也是将我的所得分享给大家!而今天这篇文章《使用 to 把庞大的 XML 文件转换成 JSON 格式,以便存储在 mongoDB

golang小白一枚,正在不断学习积累知识,现将学习到的知识记录一下,也是将我的所得分享给大家!而今天这篇文章《使用 to 把庞大的 XML 文件转换成 JSON 格式,以便存储在 mongoDB 数据库中》带大家来了解一下##content_title##,希望对大家的知识积累有所帮助,从而弥补自己的不足,助力实战开发


问题内容

对于我的一个项目,我必须处理超过 2GB 的 XML 文件。我想将数据存储在 monGoDB 中。我决定使用 Go 语言尝试一下。但我在找出在 Go 中执行此操作的最佳方法时遇到了一些困难。

我见过很多具有固定 XML 结构的示例,但我获得的数据结构是动态的,因此使用某种预定义的结构对我来说不起作用。

现在我偶然发现了这个包:https://GitHub.com/basgys/goxml2json,它看起来很有前途,但有一些东西我不明白:

  • 自述文件中给出的示例使用 XML 字符串,但我在代码中没有看到任何接受文件的内容。
  • 在这个例子中,我有 2GB 的 xml 文件,我不能简单地将整个 XML 文件加载到内存中。这会让我的服务器混乱。

我认为这样说很好,我只需将 XML 数据转换为 JSON 形式一次,这样我就可以将其存储在 mongoDB 中。

你们中的一些人对如何使用 Go 将 XML 文件有效解析为 JSON 有一些想法吗?


解决方案


go 提供了 builtin XML stream parser at encoding/xml.Decoder

典型的使用模式是读取令牌,直到找到感兴趣的内容,然后将令牌解组到 xml 标记结构中,然后相应地处理该数据。这样,您只需将单个 xml 令牌所需的内容加载到内存中,或者解组一些有趣的数据。

例如(Go Playground):

d := xml.NewDecoder(xmlStream)
for {
  // Decode the next token from the stream...
  token, err := d.Token()
  if err == io.EOF {
    break
  }
  check(err)

  // Switch behavior based on the token type.
  switch el := token.(type) {
  case xml.StartElement:
    // Handle "person" start elements by unmarshaling from XML...
    if el.Name.Local == "person" {
      var p Person
      err := d.DecodeElement(&p, &el)
      check(err)

      // ...then marshal to JSON...
      jsonbytes, err := json.Marshal(p)
      check(err)

      // ...then take other action (e.g. insert into database).
      fmt.Printf("OK: %s\n", string(jsonbytes))
      // OK: {"Id":"123","Name":"Alice","Age":30}
    }
  }
}

今天带大家了解了的相关知识,希望对你有所帮助;关于Golang的技术知识我们会一点点深入介绍,欢迎大家关注编程网公众号,一起学习编程~

您可能感兴趣的文档:

--结束END--

本文标题: 使用 to 把庞大的 XML 文件转换成 JSON 格式,以便存储在 MongoDB 数据库中

本文链接: https://lsjlt.com/news/595726.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作