Skip to content

puripuri2100/yojson-rs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

27 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

yojson-rs: JSON library for Rust

crates.io docs.rs Build Status source badge license badge

This library parses JSON data (yojson format) into a nested Rust tree data structure.

Yojson values

A value in Yojson is represented with the Value enum in this crate:

pub enum Value {
  Null,
  Bool(bool),
  Integer(i64),
  Float(f64),
  String(String),
  Assoc(Assoc),
  Array(Array),
  Tuple(Vec<Value>),
  Variant(Variant),
}

The Yojson format is an extension of the JSON format. See "Yojson format document" for more information.

  • Tuples: like JSON arrays but within parentheses instead of square brackets, such as (1.23, 4.56).
  • Variants without argument: <"Foo">.
  • Variants with one argument: <"Bar": 123>.
  • Unquoted field names and variants are accepted if they match the pattern [A-Za-z][A-Za-z_0-9]*: { x: <Foo>, "#y": <Bar2> }.
  • Comments: /* multiline comment */ and // end-of-line comment.
  • Special numeric entities: [ Infinity, -Infinity, NaN ].

Parsing JSON

Parse JSON data.

use yojson_rs;
fn main () {
  let json = r#"
    {
      x : 123,
      y : {
            "y1" : "abc\ndef\u0021",
            "y2" : [null, 123.45, (12, "y3")]
          },
      z : NaN
    }
    "#;
  assert!(yojson_rs::parser::parse(json).is_ok());
}

Convert to a JSON string.

A data structure can be converted to a JSON string by to_string.

use yojson_rs;
fn main() {
  let json_str = r#"
    {
      x : 123,
      y : {
             "y1" : "abc\ndef\u0021",
             "y2" : [null, 123.45, (12, "y3")]
          },
      z : NaN
    }
    "#;
  let json = yojson_rs::parser::parse(json_str).unwrap();
  println!("{}", yojson_rs::to_string(json));
}

(c) 2021 Naoki Kaneko (a.k.a. "puripuri2100")