#json-xml #json #xml #转换

xml2json-rs

用于XML/JSON之间转换的库

2个稳定版本

1.0.3 2022年7月14日
1.0.1 2022年8月11日

#1021 in 编码

Download history 684/week @ 2024-03-14 332/week @ 2024-03-21 397/week @ 2024-03-28 545/week @ 2024-04-04 391/week @ 2024-04-11 453/week @ 2024-04-18 712/week @ 2024-04-25 510/week @ 2024-05-02 580/week @ 2024-05-09 313/week @ 2024-05-16 465/week @ 2024-05-23 386/week @ 2024-05-30 603/week @ 2024-06-06 828/week @ 2024-06-13 918/week @ 2024-06-20 297/week @ 2024-06-27

2,755 每月下载量
6 个crate中使用(通过 br-xml

MIT 许可证

49KB
970

XML2JSON

Tests License License

一个用于XML和JSON之间转换的Rust库。

安装

λ › cargo add xml2json-rs

用法

JSON转XML

XmlBuilder

XmlBuilder 从JSON构建XML。

  • build_from_json 从一个 serde_json::Value 构建一个XML String
  • build_from_json_string 从一个序列化的JSON String构建一个XML String

示例

use xml2json::XmlBuilder;
use std::error::Error;

fn main() -> Result<(), Box<dyn Error>> {
  let mut xml_builder = XmlBuilder::default();
  let xml= xml_builder.build_from_json_string(r#"{"book":{"$":{"category":"fantasy"},"title":{"_":"The Name of the Wind","$":{"lang":"en"}},"author":"Patrick Rothfuss","year":"2007"}}"#)?;
  assert_eq!(xml, r#"<?xml version="1.0"?><book category="fantasy"><title lang="en">The Name of the Wind</title><author>Patrick Rothfuss</author><year>2007</year></book>"#);
  Ok(())
}

XmlConfig

XmlConfig 使用Builder模式设置配置选项,然后通过finalize构建一个XmlBuilder

示例

use xml2json::XmlConfig;
use xml2json::{ Indentation, Declaration, Version, Encoding };
use std::error::Error;
use indoc::indoc;

fn main() -> Result<(), Box<dyn Error>> {
  let mut xml_builder = XmlConfig::new()
    .rendering(Indentation::new(b' ', 2))
    .decl(Declaration::new(Version::XML10, Some(Encoding::UTF8), Some(true)))
    .attr_key("^")
    .root_name("store")
    .finalize();

  let xml = xml_builder.build_from_json_string(r#"{"book":{"^":{"category":"fantasy"},"title":{"_":"The Name of the Wind","^":{"lang":"en"}},"author":"Patrick Rothfuss","year":"2007"}}"#)?;
  assert_eq!(xml, indoc!(r#"
  <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  <store>
    <book category="fantasy">
      <title lang="en">The Name of the Wind</title>
      <author>Patrick Rothfuss</author>
      <year>2007</year>
    </book>
  </store>"#));
  Ok(())
}

XML转JSON

JsonBuilder

JsonBuilder 从XML构建JSON。

  • build_from_xml 从一个XML String构建一个 serde_json::Value
  • build_string_from_xml 从一个XML String构建一个JSON序列化的 String
  • build_pretty_string_from_xml 从一个XML String构建一个格式化的JSON序列化的 String

示例

use xml2json::JsonBuilder;
use std::error::Error;

fn main() -> Result<(), Box<dyn Error>> {
  let json_builder = JsonBuilder::default();
  let json = json_builder.build_string_from_xml(r#"<?xml version="1.0"?><book category="fantasy"><title lang="en">The Name of the Wind</title><author>Patrick Rothfuss</author><year>2007</year></book>"#)?;
  assert_eq!(json, r#"{"book":{"$":{"category":"fantasy"},"title":{"$":{"lang":"en"},"_":"The Name of the Wind"},"author":"Patrick Rothfuss","year":"2007"}}"#);
  Ok(())
}

JsonConfig

JsonConfig 使用Builder模式设置配置选项,然后通过finalize构建一个JsonBuilder

示例

use xml2json::JsonConfig;
use std::error::Error;

fn main() -> Result<(), Box<dyn Error>> {
  let json_builder = JsonConfig::new()
    .ignore_attrs(true)
    .explicit_array(false)
    .finalize();
  let json = json_builder.build_string_from_xml(r#"<?xml version="1.0"?><book category="fantasy"><title lang="en">The Name of the Wind</title><author>Patrick Rothfuss</author><year>2007</year></book>"#)?;
  assert_eq!(json, r#"{"book":{"title":"The Name of the Wind","author":"Patrick Rothfuss","year":"2007"}}"#);
  Ok(())
}

目标

这个库受node-xml2json的启发,主要目标是与其0.4.20版本保持兼容。

测试

通过使用node-xml2json生成的脚本进行集成测试,以验证兼容性。

生成

λ › cd tests/generator
λ › yarn
λ › ./generate

运行

λ › cargo test

依赖

~4.5-6MB
~106K SLoC