如何将XML文件转换为JSON文件

10

如何将Linux目录提取的数据保存到JSON文件中?我已经尝试将其保存到XML文件中,如果运行脚本,它将生成一个名为"data.xml"的XML文件。

我不知道如何将其转换为JSON文件。

这是我的Bash脚本中的XML模板:

file=~/data.xml
  template=" <Data>\n\
  <date>%d</date>\n\
  <time>%d</time>\n\
  <age>%d</age>\n\
  <place>%s</place>\n\
  <name>%d<name>\n\</Data>\n"

  echo '<?xml version="1.0"?>' >> $file
  echo '<List2>' >> $file

模板
printf "$template" "$date"\
                    "$time"\
                    "$age"\
                    "$place"\
                    "$name"\$file   
#closing tag
echo '</List>' >> $file

4
你是否可以针对JSON做类似的事情而不是XML呢?template='{"data":{"date":"%d" ... - Thilo
@Thilo:非常好的建议。 - lr.
@Gen,你已经可以在模板中使用数据($date、$time等)。你唯一的挑战是将输出格式化为JSON格式。拥有一个能够以多种格式输出数据的脚本并不罕见。 - David C. Rankin
如果你想保留XML生成器,你也可以考虑将XML转换为JSON。请参考https://dev59.com/3WMk5IYBdhLWcg3w8STa,这里有一个很好的例子。 - Jocce Nilsson
通用的XML转JSON可能是一个挑战,因为XML数据都是字符串,而JSON只有很少的类型。没有简单的方法来判断像“12345”这样的标记是数字还是字符串。反过来(JSON->XML)更容易,可以使用类似于jq的工具。通过模式可能可以进行转换,但这需要更多的设置工作。 - dash-o
2个回答

7

github.com/mikefarah/yq 已经支持这个功能了:

yq -p=xml -o=json file.xml

您可以使用类似jq表达式语法的方式来对数据进行必要的修改和处理。
免责声明:本人编写了yq。

这在处理非常大的文件时如何工作 - 是否有流式传输选项? - gingerwizard
不抱歉 - 它会将整个文档读入内存。 - mike.f

0
我建议使用xmljson库,并编写类似以下代码的内容:
from collections import OrderedDict
from xmljson import BadgerFish
from json import dumps

def xml_to_json(xml_string):
    bf = BadgerFish(dict_type=OrderedDict)
    return dumps(bf.data(fromstring(xml_string)))

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接