Read a json file in Deno
Deno is a secure runtine for JavaScript, so to read a file the program needs
explicit permissions. We can enable file reading with the --allow-read
flag in
the command line:
deno run --allow-read read-json.ts
Once the permissions are straight, we need to read the file. There are a few
methods on the Deno
module to use, so let's look at two options: readFile
,
and readTextFile
.
Let's take a look at them separately.
readFile
Permalink to “readFile” Deno's readFile
method returns a Promise resolves with a Uint8Array. You can
call the method like this:
console.log(await Deno.readFile("data.json"));
So if we run the following code in a directory with a data.json
file, you
would see a log like this:
Uint8Array(29) [
123, 10, 32, 32, 32, 32, 34, 115,
111, 117, 114, 99, 101, 34, 58, 32,
34, 100, 97, 116, 97, 46, 106, 115,
111, 110, 34, 10, 125
]
In order to read this, we need a new text decoder decoder with and pass the file's encoding:
const decoder = new TextDecoder("utf-8");
const data = await Deno.readFile("data.json");
console.log(decoder.decode(data));
Now when we run the code, we see the contents of data.json
logged in the
console:
{
"source": "data.json"
}
This looks good, but it is just a formatted string. To consume this data, we
need to use the global JSON
object's parse
method to get a usuable json
object.
const decoder = new TextDecoder("utf-8");
const data = await Deno.readFile("data.json");
console.log(JSON.parse(decoder.decode(data)));
Run it again, and you will see whatever data you had stored in your json file
logged to the console. You have successfully read a json file in Deno with
readFile
!
If you know that your data is utf8 encoded, you can skip a step with the next Deno method.
readTextFile
Permalink to “readTextFile” Deno's readTextFile
method returns a Promise that resolves to a utf8 decoded
string. You can call the method like this:
console.log(await Deno.readTextFile("data.json"));
Once again, if we run this code in a directory with a data.json
file, you
would see the file's contents logged in the console:
{
"source": "data.json"
}
This looks good, but just like before it is only a formatted string. To consume
this data, we need to use the global JSON
object's parse
method again to get
a usuable json object.
const text = await Deno.readTextFile("data.json");
console.log(JSON.parse(text));
Run it again, and you will see whatever data you had stored in your json file
logged to the console. You have successfully read a json file in Deno with
readTextFile
!
Conclusion
Permalink to “Conclusion”If you know that your file is utf8 encoded, using Deno.readTextFile
is an easy
way to grab the contents of a file. Otherwise, Deno.readFile
and a decoder can
get you on your way.
Whichever method you choose, just remember to parse the json data before trying to consume it.
Happy coding!