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

MIT 许可证

12KB
180

json_macros

Crates.io [构建状态] (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 Valuerustc-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_macrosrustc-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_macrosserde_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