xml到json
用于将XML文件转换为JSON的快速简便的库和命令行工具。
目录
概述
xml-to-json将xml转换为json。它包括一个Haskell库和一个命令行工具。
xml-to-json附带了两个不同的可执行文件:
xml-to-json-fast
(“fast”)使用更少的内存,但无法控制输出。可以用于任何大小的XML文件。
xml到json
(“classic”)提供了对json输出格式的一些控制,但使用了大量内存。适用于较小的文件。
“快速”xml-to-json-Fast
所谓的“快速”版本(使用更少的内存)已经分叉到一个单独的项目中,xml-to-json-fast.
“经典”xml-to-json
功能齐全的“经典”xml到json
提供了紧凑的json输出,其设计便于使用基于json的数据库进行存储和处理,例如mongoDB(蒙古数据库)或沙发DB事实上,xml-to-json的最初动机是使用一个现成的可伸缩json数据库存储和查询一个大型(约10GB)基于xml的数据集。
使用“经典”xml-to-json时,输入xml必须有效。
目前,xml-to-json根据有损规则处理xml,这些规则旨在产生合理的最小输出。如果您需要在不丢失任何信息的情况下进行转换,请考虑jsonml项目。与jsonml不同,此工具-xml-to-json生成的json输出与xml2json-xslt项目.
实施说明
xml-to-json在中实现哈斯克尔.
在撰写本文时,xml-to-json使用hxt(赫兹)使用外籍人士-基于hxt-expat公司解析器。hxt的纯Haskell解析器所有人似乎都有记忆问题hxt-expat没有。
安装
Windows用户注意事项:仅支持本地文件而不支持URL作为命令行参数。这是因为卷曲无法在我的(windows+cygwin)机器上即时编译。
要安装发布版本:由于xml-to-json是在Haskell中实现的,“您需要做的”就是安装最新的Haskell平台然后运行:
阴谋集团更新cabal安装xml-to-json
要安装来自源:在本地克隆此存储库,然后(假设您Haskell平台已安装)运行阴谋集团安装
:
cd xml到json电缆安装
用法
基本用法
只需将文件名作为单个参数运行该工具,并将stdout指向文件或管道:
xml-to-json myfile.xml>myfile.js
经典的xml到json
:高级用法
使用--帮助
选项查看完整的命令行选项。
以下是(可能已经过时)--帮助
输出:
用法:<program>[OPTION…]文件。。。-h--help显示此帮助-t TAG--TAG-name=TAG使用名为TAG的节点开始转换(忽略所有父节点)-s—skip-roots忽略所选节点,并从其子节点开始转换(可以与“start-tag”选项结合使用,仅处理匹配节点的子节点)-a--as array在顶级JSON数组中输出结果对象-m—multiline使用“as-array”输出时,在单独的行上打印每个顶级json对象。(如果不使用“as-array”,则不管如何,此选项都将启用,并且输出始终为线性操作。)--no-collapse-text=PATTERN对于标记仅匹配正则表达式的元素PATTERN:不要将只包含文本的元素折叠为简单的字符串属性。相反,始终为文本节点发出“.value”属性,即使元素只包含文本。(输出“模式”将更加稳定。)--no-ignore-nulls不要忽略顶层输出对象中的null(并输出它们)
输出示例
输入文件:
<?xml版本=“1.0”?><!DOCTYPE测试><测试><测试名称=“第一次测试”><SomeText>一些简单文本</SomeText><SomeMoreText>更多文本<描述格式=“FooFormat”>只是个傻瓜<!-- 注释-->Xml文件。</说明></测试><测试名称=“秒”/></测试>
使用默认设置的JSON输出:
{“测试”:{“测试”:[{“名称”:“第一个测试”,“SomeText”:“一些简单文本”,“描述”:{“格式”:“FooFormat”,“值”:“只是一个伪的\n\nXml文件。”}},{“名称”:“第二个”}]}}
格式化以便于阅读(不是实际输出):
{“测试”:{“测试”:[{“Name”:“第一次测试”,“SomeMoreText”:“更多文本”,“SomeText”:“一些简单文本”,“说明”:{“Format”:“FooFormat”,“value”:“只是一个虚拟的\n\nXml文件。”}},{“名称”:“第二个”}]}}
注意,当前xml-to-json没有保留元素/属性的顺序。
使用各种选项,您可以控制输出的各个方面,例如:
- 转换在哪个顶级节点开始工作(-t)
- 是否将输出封装在顶级JSON数组中,
- 是否将简单字符串元素(例如示例中的元素)折叠为简单字符串属性(可以指定正则表达式模式来决定折叠哪些节点)
- 还有更多。。。
使用--帮助
选项查看选项的完整列表。
“经典”xml-to-json无法操作大型文件。然而,在操作多个小文件时速度很快。对于大型XML文件,core-i5机器上的速度约为2MB XML/sec,100MB XML文件产生56MB json输出。处理1GB的xml数据大约需要10分钟。主要的性能限制是内存,因为每个大文件(几十兆字节)都会消耗大量内存,所以只有一个单线程进程在运行,大约是文件大小的50倍。
一些简单的测试表明,这一速度至少是jsonml的基于xlst的转换器(然而,如上所述,输出并不相似)。
目前,该程序串行处理文件。如果在许多小的XML文件(<5MB)上并行运行,性能将受到cpu限制,处理可能会许多的速度更快,具体取决于体系结构。一个简单的测试表明,性能约为5MB/秒(在同一个内核上,即i5)。