momoa

Crates.iomomoa
lib.rsmomoa
version3.2.3
sourcesrc
created_at2023-03-16 22:01:58.48144
updated_at2024-12-03 21:55:14.066675
descriptionA JSON parsing library suitable for static analysis
homepage
repositoryhttps://github.com/humanwhocodes/momoa
max_upload_size
id812109
size78,380
Nicholas C. Zakas (nzakas)

documentation

README

Momoa JSON

by Nicholas C. Zakas

If you find this useful, please consider supporting my work with a donation.

About

Momoa is a general purpose JSON utility toolkit, containing:

  • A tokenizer that allows you to separate a JSON string into its component parts.
  • A ECMA-404 compliant parser that produces an abstract syntax tree (AST) representing everything inside of a JSON string.

Background

A tool like Momoa comes in handy when you want to know not just the result of JSON parsing, but exactly what is contained in the original JSON string.

Usage

Parsing

There are two parsing methods: one for JSON and one for JSONC.

To parse a JSON string into an AST, use the json::parse() function:

use momoa::ast::*;
use momoa::json;

fn do_parse(code) -> Node {
    let ast = json::parse(code).unwrap();

    // do something with ast

    ast
}

To allow trailing commas in JSON, use the json::parse_with_trailing_commas() function:

use momoa::ast::*;
use momoa::json;

fn do_parse(code) -> Node {
    let ast = json::parse_with_trailing_commas(code).unwrap();

    // do something with ast

    ast
}

To parse a JSONC string into an AST, use the jsonc::parse() function:

use momoa::ast::*;
use momoa::jsonc;

fn do_parse(code) -> Node {
    let ast = jsonc::parse(code).unwrap();

    // do something with ast

    ast
}

To allow trailing commas in JSONC, use the jsonc::parse_with_trailing_commas() function:

use momoa::ast::*;
use momoa::jsonc;

fn do_parse(code) -> Node {
    let ast = jsonc::parse_with_trailing_commas(code).unwrap();

    // do something with ast

    ast
}

Tokenizing

To produce JSON tokens from a string, use the json::tokenize() function:

use momoa::*;

fn do_parse(code) -> Vec<Token> {
    let result = json::tokenize(code).unwrap();


    // do something with ast

    result
}

To produce JSON tokens from a string, use the jsonc::tokenize() function:

use momoa::*;

fn do_parse(code) -> Vec<Token> {
    let result = jsonc::tokenize(code).unwrap();


    // do something with ast

    result
}

Development

To work on Momoa, you'll need:

Make sure both are installed by visiting the links and following the instructions to install.

Now you're ready to clone the repository:

git clone https://github.com/humanwhocodes/momoa.git

Then, enter the directory and install the dependencies:

cd momoa/rust
cargo build

After that, you can run the tests via:

cargo test

License

Apache 2.0

Frequently Asked Questions

What does "Momoa" even mean?

Momoa is the last name of American actor Jason Momoa. Because "JSON" is pronounced "Jason", I wanted a name that played off of this fact. The most obvious choice would have been something related to Jason and the Argonauts, as this movie is referenced in the JSON specification directly. However, both "Argo" and "Argonaut" were already used for open source projects. When I did a search for "Jason" online, Jason Momoa was the first result that came up. He always plays badass characters so it seemed to fit.

Why support comments in JSON?

There are a number of programs that allow C-style comments in JSON files, most notably, configuration files for Visual Studio Code. As there seems to be a need for this functionality, I decided to add it out-of-the-box.

Commit count: 191

cargo fmt