Coder Social home page Coder Social logo

jsonc-parser's Introduction

jsonc-parser

JSONC parser implemented in Rust.

Example

To a simple JsonValue:

use jsonc_parser::parse_to_value;

let json_value = parse_to_value(r#"{ "test": 5 } // test"#, &Default::default())?;
// check the json_value here

Or an AST:

use jsonc_parser::parse_to_ast;
use jsonc_parser::CollectOptions;

let parse_result = parse_to_ast(r#"{ "test": 5 } // test"#, &CollectOptions {
    comments: true, // include comments in result
    tokens: true, // include tokens in result
}, &Default::default())?;
// ...inspect parse_result for value, tokens, and comments here...

Or use the "serde" feature:

# in Cargo.toml
jsonc-parser = { version = "...", features = ["serde"] }
use jsonc_parser::parse_to_serde_value;

let json_value = parse_to_serde_value(r#"{ "test": 5 } // test"#, &Default::default())?;

Parse Strictly as JSON

Provide ParseOptions and set all the options to false:

use jsonc_parser::parse_to_value;
use jsonc_parser::ParseOptions;

let json_value = parse_to_value(text, &ParseOptions {
  allow_comments: false,
  allow_loose_object_property_names: false,
  allow_trailing_commas: false,
})?;

jsonc-parser's People

Contributors

dsherret avatar IWANABETHATGUY avatar

Stargazers

Nikita avatar Paul Butler avatar L8ng avatar Zheyu Zhang avatar Artem Makoven avatar  avatar ヾ(^-^)ノ avatar Deliang Yang avatar Eduardo Rabelo avatar Khải avatar Ivan Ignatenko avatar Zhao Xiaohong avatar Harry Solovay avatar Sharif Ahmed avatar 伊欧 avatar  avatar Lazar Ljubenović avatar Ryan Atkinson avatar

Watchers

James Cloos avatar David Sherret avatar Lazar Ljubenović avatar Albert Leigh avatar

jsonc-parser's Issues

cannot find function parse_to_serde_value

I'm trying it use parse_to_serde_value but I get this error:
error[E0425]: cannot find function parse_to_serde_value in crate jsonc_parser
It's really weird because the function is clearly there and all I'm doing is just calling it using jsonc_parser::parse_to_serde_value.
Another weird thing is, when I start typing parse_to_serde_value inside use jsonc_parser::{}, vscode starts recommending it but then after I accept it, it just says no parse_to_serde_value in the root!
What's going on?

Implement std::error::Error for ParseError

Using the lib I encountered a bit surprising behavior where ParseError doesn't implement std::error::Error. It makes handling a bit unwieldy.

error[E0277]: the trait bound `jsonc_parser::errors::ParseError: std::error::Error` is not satisfied
   --> cli/tsc_config.rs:147:15
    |
147 |   let jsonc = jsonc_parser::parse_to_value(config_text.as_ref()).map_err(ErrBox::from)?.unwrap();
    |               ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ the trait `std::error::Error` is not implemented for `jsonc_parser::errors::ParseError`

Also, why is ok return value from parse_to_value an Option<JsonValue> instead of just JsonValue?

Change the repository name to json5-parser

jsonc-parser/src/scanner.rs

Lines 317 to 334 in 6ef505d

match self.current_char() {
Some('e') | Some('E') => match self.move_next_char() {
Some('-') | Some('+') => {
self.move_next_char();
if !self.is_digit() {
return Err(self.create_error_for_current_char("Expected a digit"));
}
while self.is_digit() {
self.move_next_char();
}
}
_ => {
return Err(self.create_error_for_current_char(
"Expected plus or minus symbol in number literal",
));
}
},
_ => {}

according to the implementation, this parser could parse not only json with comments but also json5
Change the repository name or add extra keyword to get better SEO

Fails to parse multi unit unicode escape sequences

jsonc_parser::parse_to_value("A\uDF06").unwrap().unwrap()

This results in:

panicked at 'called `Result::unwrap()` on an `Err` value: ParseError { range: Range { start: 847, end: 853, start_line: 29, end_line: 29 }, message: "Error converting hex of DF06 to u8. ParseIntError { kind: Overflow }", display_message: "Error converting hex of DF06 to u8. ParseIntError { kind: Overflow } on line 30 column 46." }'

Disregard the line and column numbers in the error above.

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.