【问题标题】:Convert XML document to JSON string preserving boolean types将 XML 文档转换为 JSON 字符串,保留布尔类型
【发布时间】:2017-04-20 02:02:38
【问题描述】:

我有一个 XSD 之后的 XML 文件,我需要将它们转换为 JSON。

文件通常是这样的

example.xml:

<object name="foo">
  <values>one</values>
  <values>two</values>
  <values>three</values>
  <param attr="2" value="true" />
</object>

转换成 JSON 到这个

{
  "name" : "foo",
  "values" : [
    "one",
    "two",
    "three"
  ],
  "param" : {
    "attr" : "2",
    "value" : "true"
  }
}

这几乎没问题,只是我希望输入数据,以便参数变为:

  "param" : {
    "attr" : 2,
    "value" : true
  }

XML 文件引用定义每个元素或属性的数据类型的 XSD 架构,例如

<xs:attribute name="attr" type="xs:integer"

XML 到 JSON 的转换是使用 XML::Simple 将 XML 读入 Perl 哈希并使用 JSON 模块编码成 JSON。

除了使用 XSD 架构中的定义来为每个字段加载具有正确类型的 XML 之外,我如何做同样的工作?

我需要使用 XSD,因为文本字段可能仅由数字组成。

【问题讨论】:

  • 您不能这样做, 无类型数据是您最不必担心的。通常,XML 文档没有等效的 JSON 字符串。如果您尝试这样做,您将需要进行大量检查以确保不会丢失信息。为什么你认为这是必要的? XML 与 JSON 等一样可移植,并且有一个适用于大多数流行编程语言的 XML 库。
  • documentation for XML::Simple 有这个。 “你真的不想在新代码中使用这个模块”“不鼓励在新代码中使用这个模块。其他模块可以提供更直接和一致的接口” XML::Simple 距离考虑 XSD 架构还有很长的路要走。
  • 您可能最终不得不并行浏览 XML 和 XSD。如果是这样的话,这是很多工作,远远超出了 SO 的范围。创建非通用解决方案(即实际上不读取 XSD 的解决方案)可能更快。
  • 感谢您的意见。这个权利。出于某些原因,我需要同时保留这两种格式,所以要开发自己的工具。

标签: json xml perl types xsd


【解决方案1】:

嗯,总结的答案是 - 你不能做你想做的事,你想做的事。

XML 是一种比 JSON 更“深”的结构,因为它具有样式表和属性,因此本质上您将在转换过程中丢弃数据。丢弃多少是可以接受的,总是要视具体情况而定。

更重要的是 - XMLJSON 都设计有类似的用例 - 是机器可读/可解析的。几乎所有可以以编程方式“读取”JSON 的东西也可以读取XML,因为两者的库通常都可用。

最重要的是 - Don't use XML::Simple 因为它不是“简单”它是 “简单”XML。你的不是。 XML::TwigXML::LibXML 对于几乎所有 XML 解析工作来说都是很多更好的工具。

所以真的 - 你需要做的是回溯一点,并解释你想要完成什么以及为什么。

虽然失败了 - 我可能在 perl 中尝试一个简单的“类型测试”,使用正则表达式来检测某个东西是“只是”数字还是“只是”布尔值,并将其他所有内容视为细绳。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-11
    • 2014-04-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多