pure-JSON
Pure version of built-in JSON Object
JSON#parse and JSON#stringify without throwing an error and any types.
Why?
Methods of the JSON object in Built-in are not pure functions and may throw
errors. Also, as of TypeScript 4.7, there is a divergence between implementation
and types.
For example, JSON#stringify may return undefined for historical reasons.
However, the return type is string.
JSON.stringify(undefined); // undefinedThis project will resolve these. The return value returns the return value of the function and the error, as in GoLang. (But as a tuple.)
Example
JSON#parse
import { JSON } from "https://deno.land/x/pure_json@$VERSION/mod.ts";
import { assertEquals } from "https://deno.land/std@$VERSION/testing/asserts.ts";
const [data, err] = JSON.parse(`{ "hello": "world"}`);
assertEquals(err, undefined);
assertEquals(data, { hello: "world" });JSON#stringify
import { JSON } from "https://deno.land/x/pure_json@$VERSION/mod.ts";
import {
assertEquals,
assertIsError,
} from "https://deno.land/std@$VERSION/testing/asserts.ts";
const cycle: Record<string, unknown> = {};
cycle[""] = cycle;
const [data, err] = JSON.stringify(cycle);
assertIsError(err, TypeError);
assertEquals(data, undefined);API
JSON
An intrinsic object that provides functions to convert JavaScript values to and from the JavaScript Object Notation (JSON) format.
parse
Safe converts a JavaScript Object Notation (JSON) string into an object. It does
not throw errors compared to JSON.parse.
import { parse } from "https://deno.land/x/pure_json@$VERSION/mod.ts";
import { assertEquals } from "https://deno.land/std@$VERSION/testing/asserts.ts";
const [data, err] = parse(`{ "hello": "world"}`);
assertEquals(err, undefined);
assertEquals(data, { hello: "world" });Parameters
- text:
string - reviver:
Parameters<typeof JSON.parse>[1]
Return Type
[data: json, err: undefined] | [data: undefined, err: SyntaxError]
stringify
Safe converts a JavaScript value to a JavaScript Object Notation (JSON) string.
import { stringify } from "https://deno.land/x/pure_json@$VERSION/mod.ts";
import {
assertEquals,
assertIsError,
} from "https://deno.land/std@$VERSION/testing/asserts.ts";
const cycle: Record<string, unknown> = {};
cycle[""] = cycle;
const [data, err] = stringify(cycle);
assertIsError(err, TypeError);
assertEquals(data, undefined);Parameters
- value:
unknown - replacer?:
(number | string)[] | null - space?:
string | number
Return Type
[valid: false, error: TypeError] | [valid: true, data: string]
json
Types for JSON.
type json =
| string
| number
| boolean
| null
| { [k: string]: json }
| json[];License
Copyright © 2022-present TomokiMiyauci.
Released under the MIT license