20个版本
使用旧的Rust 2015
0.3.2 | 2016年7月19日 |
---|---|
0.3.0 | 2016年1月5日 |
0.2.6 | 2015年12月7日 |
0.2.5 | 2015年7月30日 |
0.0.3 | 2014年11月23日 |
#2174 在 编码 中
用于 2 crates
12KB
180 行
json_macros
[] (https://travis-ci.org/tomjakubowski/json_macros)
let properties = json! {
"menu": {
"id": "file",
"value": "File",
"popup": {
"menuitem": [
{"value": "New", "onclick": "CreateNewDoc()"},
{"value": "Open", "onclick": "OpenDoc()"},
{"value": "Close", "onclick": "CloseDoc()"}
]
}
}
};
let menu_value = properties.find_path(["menu", "value"])
.map(|x| x.as_string());
assert_eq!(menu_value, Some("File"));
使用Rust中的类似JSON的字面量来构建serde_json
Value
或rustc-serialize
Json
值。
因为json_macros
是一个编译器插件,所以它只兼容Rust nightly频道。
根据您的项目需求,您可能需要让json_macros
生成构建serde_json
值或构建rustc-serialize
值的代码。
使用json_macros与rustc-serialize
默认情况下,json_macros
生成rustc-serialize
的代码。在未来版本中,默认可能切换到serde_json
,但只要该crate得到支持,json_macros
至少应该可选地兼容rustc-serialize
。
要使用json_macros
与rustc-serialize
,请将这两个包作为依赖项添加到您的Cargo.toml
中。
[dependencies]
json_macros = "^0.3"
rustc-serialize = "^0.3"
您的crate还需要链接到rustc_serialize
,并在任何使用use
宏的子模块中调用它。
extern crate rustc_serialize;
// ...
mod foo {
use rustc_serialize;
// ...
}
示例
#![feature(plugin)]
#![plugin(json_macros)]
extern crate rustc_serialize;
pub fn main() {
let x = 123i32;
println!("{}", json!({ // object literal
"foo": "foooooo", // string literal keys and values
"bar": [true, null, 123, 123.4], // array, boolean, null, numeric literals
"quux": { // nest as deeply as you like
"a": [1, 2, 3, 4],
"b": { "a": null },
"c": false
},
"waldo": (192 - x) // wrap in parens to splice ToJson expressions directly
}).pretty().to_string());
}
使用json_macros与serde_json
要使用 json_macros
与 serde_json
一起,请将这两个包作为依赖项添加到您的 Cargo.toml
文件中。为 json_macros
启用 with-serde_json
功能,并禁用默认功能,这样就不会依赖于 rustc-serialize
。
[dependencies]
rustc-serialize = "^0.3"
[dependencies.json_macros]
version = "^0.3"
default-features = false
features = ["with-serde"]
您的crate还需要链接到 serde_json
并在任何使用 json!()
宏的子模块中使用它。
extern crate serde_json;
// ...
mod foo {
use serde_json;
// ...
}
示例
#![feature(plugin)]
#![plugin(json_macros)]
extern crate serde_json;
pub fn main() {
let x = 123i32;
println!("{}", serde_json::to_string_pretty(&json!({ // object literal
"foo": "foooooo", // string literal keys and values
"bar": [true, null, 123, 123.4], // array, boolean, null, numeric literals
"quux": { // nest as deeply as you like
"a": [1, 2, 3, 4],
"b": { "a": null },
"c": false
},
"waldo": (192 - x) // wrap in parens to splice ToJson expressions directly
})).unwrap());
}
依赖项
~0–355KB