4个版本

使用旧Rust 2015

0.2.3 2016年11月25日
0.2.2 2016年11月25日
0.2.1 2016年9月26日
0.1.0 2016年5月3日

#2952 in 解析器实现

BSD-2-Clause

26KB
766

Rust的运行时JSON解析器

crates.io travis-ci coveralls

simple_json是一个为简化读取和写入JSON编码数据而创建的运行时递归解析器。它也应该是与当前稳定版本兼容的,如果您发现任何问题,请报告。

虽然我相信这个包对于大多数情况来说运行速度足够快,但它并不是为了性能或大数据集而设计的。在这种情况下,您可能最好使用Serde

这个包滥用了Rust的Option功能,并创建了一个树,其中所有节点都符合6种类型之一

  • Json::Object(HashMap<String, Json>)
  • Json::Array(Vec<Json>)
  • Json::String(String)
  • Json::Number(simple_json::Number)
  • Json::Boolean(bool)
  • Json::Null

它们都实现了两种方式的From特质,因此它们与它们的本地对应物之间的转换应该就像调用into()一样简单。

Number是另一个枚举,用于表示JSON数字可以持有的多种不同类型。解析器将尝试为每种情况选择最合适的类型,因此这对于用户来说应该是透明的。

Number可以是以下三种类型之一

  • Number::Float(f64),如果它是一个浮点数(例如,3.2)或如果以科学记数法编写(例如,3e2);
  • Number::Integer(i64),如果解析器收到一个有符号数字(例如,-1);
  • Number::Unsigned(u64),对于其他所有内容(例如,42)。

这里有一个简单的例子

extern crate simple_json;

use simple_json::Json;

fn main() {
    let mut text = "{ \"integer\": 12, \"float\": 80.5, \"string\": \"A JSON sample\", \"array\": [ 1, 2, 3 ], \"object\": { \"a\": \"b\" } }";
    let result = Json::parse(text).unwrap();
    
    println!("Result: {}", result.to_string());
}

输出

Result: {
  "integer": 12,
  "float":   80.5,
  "string":  "A JSON sample",
  "array": [ 1, 2, 3 ],
  "object": {
    "a": "b"
  }
}

无运行时依赖项