Skip to content

tomjakubowski/json_macros

master
Switch branches/tags

Name already in use

A tag already exists with the provided branch name. Many Git commands accept both tag and branch names, so creating this branch may cause unexpected behavior. Are you sure you want to create this branch?
Code

Latest commit

 

Git stats

Files

Permalink
Failed to load latest commit information.
Type
Name
Latest commit message
Commit time
 
 
src
 
 
 
 
 
 
 
 
 
 
 
 

json_macros

Crates.io [Build Status] (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"));

Use JSON-like literals in Rust to construct serde_json Values or rustc-serialize Json values.

Because json_macros is a compiler plugin, it's only compatible with the Rust nightly channel.

Depending on your project's needs, you may ask json_macros to generate code that constructs serde_json values or code that constructs rustc-serialize values.

Using json_macros with rustc-serialize

By default, json_macros generates code for rustc-serialize. In a future release, the default may switch to serde_json, but json_macros should be at least optionally compatible with rustc-serialize for as long as that crate is supported.

To use json_macros with rustc-serialize, add both packages as dependencies to your Cargo.toml.

[dependencies]
json_macros = "^0.3"
rustc-serialize = "^0.3"

Your crate will also need to link with rustc_serialize and use it in any submodule that uses the json!() macro.

extern crate rustc_serialize;

// ...

mod foo {
    use rustc_serialize;
    // ...
}

Example

#![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());
}

Using json_macros with serde_json

To use json_macros with serde_json, add both packages as dependencies to your Cargo.toml. Enable the with-serde_json feature for json_macros and disable the default features so as to not depend on rustc-serialize.

[dependencies]
rustc-serialize = "^0.3"

[dependencies.json_macros]
version = "^0.3"
default-features = false
features = ["with-serde"]

Your crate will also need to link with serde_json and use it in any submodule that uses the json!() macro.

extern crate serde_json;

// ...

mod foo {
    use serde_json;
    // ...
}

Example

#![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());
}

About

Construct JSON objects in Rust from JSON-like literals. (deprecado, use serde_json's json! macro)

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Languages