Skip to content
Permalink
Browse files

feat: add readJson/readJsonSync for fs modules (#269)

  • Loading branch information...
axetroy authored and ry committed Mar 13, 2019
1 parent a1fcfb2 commit e4485d722ac978c023f9f6720734264e99e1577f
@@ -0,0 +1,42 @@
// Copyright 2018-2019 the Deno authors. All rights reserved. MIT license.
import * as path from "./path/mod.ts";

/**
* Reads a JSON file and then parses it into an object
* @export
* @param {string} filePath
* @returns {Promise<any>}
*/
export async function readJson(filePath: string): Promise<any> {
filePath = path.resolve(filePath);
const decoder = new TextDecoder("utf-8");

const content = decoder.decode(await Deno.readFile(filePath));

try {
return JSON.parse(content);
} catch (err) {
err.message = `${filePath}: ${err.message}`;
throw err;
}
}

/**
* Reads a JSON file and then parses it into an object
* @export
* @param {string} filePath
* @returns {void}
*/
export function readJsonSync(filePath: string): any {
filePath = path.resolve(filePath);
const decoder = new TextDecoder("utf-8");

const content = decoder.decode(Deno.readFileSync(filePath));

try {
return JSON.parse(content);
} catch (err) {
err.message = `${filePath}: ${err.message}`;
throw err;
}
}
@@ -0,0 +1,91 @@
// Copyright 2018-2019 the Deno authors. All rights reserved. MIT license.
import { test } from "../testing/mod.ts";
import {
assertEquals,
assertThrowsAsync,
assertThrows
} from "../testing/asserts.ts";
import { readJson, readJsonSync } from "./read_json.ts";
import * as path from "./path/mod.ts";

const testdataDir = path.resolve("fs", "testdata");

test(async function readJsonFileNotExists() {
const emptyJsonFile = path.join(testdataDir, "json_not_exists.json");

await assertThrowsAsync(async () => {
await readJson(emptyJsonFile);
});
});

test(async function readEmptyJsonFile() {
const emptyJsonFile = path.join(testdataDir, "json_empty.json");

await assertThrowsAsync(async () => {
await readJson(emptyJsonFile);
});
});

test(async function readInvalidJsonFile() {
const invalidJsonFile = path.join(testdataDir, "json_invalid.json");

await assertThrowsAsync(async () => {
await readJson(invalidJsonFile);
});
});

test(async function readValidJsonFile() {
const invalidJsonFile = path.join(testdataDir, "json_valid_array.json");

const json = await readJson(invalidJsonFile);

assertEquals(json, ["1", "2", "3"]);
});

test(async function readValidJsonFile() {
const invalidJsonFile = path.join(testdataDir, "json_valid_obj.json");

const json = await readJson(invalidJsonFile);

assertEquals(json, { key1: "value1", key2: "value2" });
});

test(function readJsonFileNotExistsSync() {
const emptyJsonFile = path.join(testdataDir, "json_not_exists.json");

assertThrows(() => {
readJsonSync(emptyJsonFile);
});
});

test(function readEmptyJsonFileSync() {
const emptyJsonFile = path.join(testdataDir, "json_empty.json");

assertThrows(() => {
readJsonSync(emptyJsonFile);
});
});

test(function readInvalidJsonFile() {
const invalidJsonFile = path.join(testdataDir, "json_invalid.json");

assertThrows(() => {
readJsonSync(invalidJsonFile);
});
});

test(function readValidJsonFile() {
const invalidJsonFile = path.join(testdataDir, "json_valid_array.json");

const json = readJsonSync(invalidJsonFile);

assertEquals(json, ["1", "2", "3"]);
});

test(function readValidJsonFile() {
const invalidJsonFile = path.join(testdataDir, "json_valid_obj.json");

const json = readJsonSync(invalidJsonFile);

assertEquals(json, { key1: "value1", key2: "value2" });
});
No changes.
@@ -0,0 +1,5 @@
{
[
"here is a invalid json file"
]
}
@@ -0,0 +1,5 @@
[
"1",
"2",
"3"
]
@@ -0,0 +1,4 @@
{
"key1": "value1",
"key2": "value2"
}
@@ -18,6 +18,7 @@ import "./fs/empty_dir_test.ts";
import "./fs/ensure_dir_test.ts";
import "./fs/ensure_file_test.ts";
import "./fs/move_test.ts";
import "./fs/read_json_test.ts";
import "./io/test.ts";
import "./http/server_test.ts";
import "./http/file_server_test.ts";

0 comments on commit e4485d7

Please sign in to comment.
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.