2.2.0 • Published 8 months ago

@anchan828/json-ast v2.2.0

Weekly downloads
735
License
MIT
Repository
github
Last release
8 months ago

Note: This repository resolves several performance issues and updates dependent packages. There are no plans to add new features.

A tolerant JSON parser

Test

Install

npm install @anchan828/json-ast

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...
  */

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.ts.

API

import { parse, Visitor, toJSON } from "json-ast";

// The visitor can stop at any time by assigning `Visitor.stop = true`
class MyVisitor extends Visitor {
  private comments: string[] = []

  public comment(commentNode: JsonComment): void {
    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 JsonDocument);

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

// One can also the `toJSON(JsonNode)` static method to convert to a JavaScript object
const obj = 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 and anchan828

2.2.0

8 months ago

2.1.185

8 months ago

2.1.184

9 months ago

2.1.183

9 months ago

2.1.181

9 months ago

2.1.180

10 months ago

2.1.182

9 months ago

2.1.176

10 months ago

2.1.178

10 months ago

2.1.177

10 months ago

2.1.179

10 months ago

2.1.170

12 months ago

2.1.172

11 months ago

2.1.171

11 months ago

2.1.174

11 months ago

2.1.173

11 months ago

2.1.175

11 months ago

2.1.161

1 year ago

2.1.163

1 year ago

2.1.162

1 year ago

2.1.165

1 year ago

2.1.164

1 year ago

2.1.167

1 year ago

2.1.166

1 year ago

2.1.169

12 months ago

2.1.168

12 months ago

2.1.160

1 year ago

2.1.159

1 year ago

2.1.158

1 year ago

2.1.157

1 year ago

2.1.156

1 year ago

2.1.155

1 year ago

2.1.154

1 year ago

2.1.153

1 year ago

2.1.152

1 year ago

2.1.151

1 year ago

2.1.150

1 year ago

2.1.149

1 year ago

2.1.148

1 year ago

2.1.147

1 year ago

2.1.146

1 year ago

2.1.145

1 year ago

2.1.144

1 year ago

2.1.143

1 year ago

2.1.142

1 year ago

2.1.141

2 years ago

2.1.140

2 years ago

2.1.139

2 years ago

2.1.138

2 years ago

2.1.137

2 years ago

2.1.136

2 years ago

2.1.135

2 years ago

2.1.132

2 years ago

2.1.134

2 years ago

2.1.133

2 years ago

2.1.131

2 years ago

2.1.130

2 years ago

2.1.114

2 years ago

2.1.116

2 years ago

2.1.115

2 years ago

2.1.118

2 years ago

2.1.117

2 years ago

2.1.119

2 years ago

2.1.121

2 years ago

2.1.120

2 years ago

2.1.123

2 years ago

2.1.122

2 years ago

2.1.125

2 years ago

2.1.124

2 years ago

2.1.127

2 years ago

2.1.126

2 years ago

2.1.129

2 years ago

2.1.128

2 years ago

2.1.109

2 years ago

2.1.110

2 years ago

2.1.112

2 years ago

2.1.111

2 years ago

2.1.113

2 years ago

2.1.103

2 years ago

2.1.105

2 years ago

2.1.104

2 years ago

2.1.107

2 years ago

2.1.106

2 years ago

2.1.108

2 years ago

2.1.102

2 years ago

2.1.98

2 years ago

2.1.99

2 years ago

2.1.101

2 years ago

2.1.96

2 years ago

2.1.100

2 years ago

2.1.97

2 years ago

2.1.94

2 years ago

2.1.95

2 years ago

2.1.93

2 years ago

2.1.89

3 years ago

2.1.88

3 years ago

2.1.92

2 years ago

2.1.90

2 years ago

2.1.91

2 years ago

2.1.87

3 years ago

2.1.85

3 years ago

2.1.86

3 years ago

2.1.83

3 years ago

2.1.84

3 years ago

2.1.81

3 years ago

2.1.82

3 years ago

2.1.80

3 years ago

2.1.78

3 years ago

2.1.79

3 years ago

2.1.77

3 years ago

2.1.76

3 years ago

2.1.75

3 years ago

2.1.69

3 years ago

2.1.74

3 years ago

2.1.72

3 years ago

2.1.73

3 years ago

2.1.70

3 years ago

2.1.71

3 years ago

2.1.58

3 years ago

2.1.59

3 years ago

2.1.56

3 years ago

2.1.57

3 years ago

2.1.55

3 years ago

2.1.67

3 years ago

2.1.68

3 years ago

2.1.65

3 years ago

2.1.66

3 years ago

2.1.63

3 years ago

2.1.64

3 years ago

2.1.61

3 years ago

2.1.62

3 years ago

2.1.60

3 years ago

2.1.54

3 years ago

2.1.52

3 years ago

2.1.53

3 years ago

2.1.51

3 years ago

2.1.49

3 years ago

2.1.47

3 years ago

2.1.48

3 years ago

2.1.45

3 years ago

2.1.46

3 years ago

2.1.50

3 years ago

2.1.43

3 years ago

2.1.44

3 years ago

2.1.41

3 years ago

2.1.42

3 years ago

2.1.40

3 years ago

2.1.38

3 years ago

2.1.39

3 years ago

2.1.36

4 years ago

2.1.37

3 years ago

2.1.34

4 years ago

2.1.35

4 years ago

2.1.32

4 years ago

2.1.33

4 years ago

2.1.31

4 years ago

2.1.27

4 years ago

2.1.28

4 years ago

2.1.29

4 years ago

2.1.30

4 years ago

2.1.26

4 years ago

2.1.25

4 years ago

2.1.23

4 years ago

2.1.24

4 years ago

2.1.22

4 years ago

2.1.21

4 years ago

2.1.20

4 years ago

2.1.19

4 years ago

2.1.18

4 years ago

2.1.17

4 years ago

2.1.16

4 years ago

2.1.15

4 years ago

2.1.14

4 years ago

2.1.13

5 years ago

2.1.12

5 years ago

2.1.10

5 years ago

2.1.8

5 years ago

2.1.11

5 years ago

2.1.9

5 years ago

2.1.7

5 years ago