mirror of
https://github.com/denoland/deno.git
synced 2024-11-27 16:10:57 -05:00
feat: add readJson/readJsonSync for fs modules (denoland/deno_std#269)
Original: e4485d722a
This commit is contained in:
parent
511dbdde73
commit
a391660d2d
7 changed files with 148 additions and 0 deletions
42
fs/read_json.ts
Normal file
42
fs/read_json.ts
Normal file
|
@ -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;
|
||||
}
|
||||
}
|
91
fs/read_json_test.ts
Normal file
91
fs/read_json_test.ts
Normal file
|
@ -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" });
|
||||
});
|
0
fs/testdata/json_empty.json
vendored
Normal file
0
fs/testdata/json_empty.json
vendored
Normal file
5
fs/testdata/json_invalid.json
vendored
Normal file
5
fs/testdata/json_invalid.json
vendored
Normal file
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
[
|
||||
"here is a invalid json file"
|
||||
]
|
||||
}
|
5
fs/testdata/json_valid_array.json
vendored
Normal file
5
fs/testdata/json_valid_array.json
vendored
Normal file
|
@ -0,0 +1,5 @@
|
|||
[
|
||||
"1",
|
||||
"2",
|
||||
"3"
|
||||
]
|
4
fs/testdata/json_valid_obj.json
vendored
Normal file
4
fs/testdata/json_valid_obj.json
vendored
Normal file
|
@ -0,0 +1,4 @@
|
|||
{
|
||||
"key1": "value1",
|
||||
"key2": "value2"
|
||||
}
|
1
test.ts
1
test.ts
|
@ -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";
|
||||
|
|
Loading…
Reference in a new issue