🚀 Big News: Socket Acquires Coana to Bring Reachability Analysis to Every Appsec Team.Learn more
Socket
Book a DemoInstallSign in
Socket

json-ast

Package Overview
Dependencies
Maintainers
1
Versions
10
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

json-ast

JSON parser AST utilities

2.1.7
latest
Source
npm
Version published
Maintainers
1
Created
Source

A tolerant JSON parser

Build Status

Features

The original code was developed by Vlad Trushin. Breaking modifications were made by Romain Gaucher to create a less strict JSON parser. Additionally, a more typical interaction with the AST has been implemented.

Current modifications and features as of 2.1.6 include:

Basic examples are available to show how to use this package.

JSONish

The JSON parser accepts a superset of the JSON language:

// some comment
{
  "key1": "value1", // some other comments
  "key2": "value2",
  ,
  ,
  /*
    Oh dear! It's important to put this here.
    And we love commas too!
    And we're missing the closing brace...
  */

Install

npm install json-ast

Structure of the AST

As of 2.1.0, the AST is defined with the following types:

[JsonNode] // Essentially an abstract class
  position: [Position]

[JsonDocument] extends [JsonNode]
  child: [?]*
  comments: [JsonComment]*

[JsonValue] extends [JsonNode]
  value: [?]

[JsonObject] extends [JsonNode]
  properties: [JsonProperty]*
  comments: [JsonComment]*

[JsonProperty] extends [JsonNode]
  key: [JsonKey]
  value: [?]*

[JsonKey] extends [JsonValue]

[JsonArray]
  items: *
  comments: [JsonComment]*

[JsonComment] extends [JsonValue]
[JsonString] extends [JsonValue]
[JsonNumber] extends [JsonValue]
[JsonTrue] extends [JsonValue]
[JsonFalse] extends [JsonValue]
[JsonNumber] extends [JsonValue]

All the types exists in src/ast.js.

API

import {parse, Visitor, AST} from 'json-ast';

// The visitor can stop at any time by assigning `Visitor.stop = true`
class MyVisitor extends Visitor {
  constructor() {
    super();
    this.comments = [];
  }

  comment(commentNode) {
    this.comments.push(commentNode.value);
  }
};

const JSON_BUFFER = `// Some comment
{
  "key": "value"
`;

// `verbose` will include the position in each node
const ast = parse(JSON_BUFFER, {verbose: true, junker: true});
assert(ast instanceof AST.JsonDocument);

const visitor = new MyVisitor();
ast.visit(visitor);
assert.deepEqual(visitor.comments, [" Some comment"]);

// One can also the `JsonNode.toJSON` static method to convert to a JavaScript object
const obj = JsonNode.toJSON(ast);
assert(obj.key === 'value');

Parsing Options

The second argument of the parse function takes an object with the following settings:

  • verbose: include positions in each AST node, true by default
  • junker: enables an error recovery mode, false by default

License

MIT Vlad Trushin and Romain Gaucher

Keywords

json

FAQs

Package last updated on 11 Apr 2017

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts