何の記事か
JSONファイル.json
のデータをデコード・エンコードする手法をまとめました。
ここで、デコードというのはJSONデータをオブジェクトに変換すること、エンコードというのはその逆を表します。
デコード
以下のようなJSONファイルがあったとします。
[
{
"country":"Japan",
"food":"sushi",
"famous_place":["Tokyo","Osaka","Nagoya"]
},
{
"country":"korea",
"food":"kumuchi"
}
]
JSON.parse()
を記述することで、JSONファイルからデータをデコードし、インスタンスとして使うことができます。
const fs = require("fs");
const jsonData = JSON.parse(fs.readFileSync("example.json"));
require("fs")
は、Node.jsのファイル扱う用のモジュールを記述しています。
console.log(jsonData[0].country); //Japan
console.log(jsonData[0].famous_place[1]); //Osaka
という風に簡単にメンバを呼び出すことができます。ちなみに、UTF8でデコードしたいときには、引数に'utf8'
を追加します。
const jsonData = JSON.parse(fs.readFileSync("example.json",'utf8'));
のように指定すればよいです。
エンコード
構造体をJSONデータにエンコードするには、JSON.stringify()
を使います。
var myStructure = {
Japan: {
food:"sushi",
famous_place:["Tokyo","Osaka","Nagoya"]
},
Korea: {
food:"kumuchi",
number: 999
}
};
var jsonData = JSON.stringify(myStructure);
//{"Japan":{"food":"sushi","famous_place":["Tokyo","Osaka","Nagoya"]},"Korea":{"food":"kumuchi","number":999}}
console.log(jsonData);
JSON.stringify()
は引数として関数を持つことができ、構造体をJSONデータにエンコードする際の条件付けなどが可能です。この関数はreplacerと呼ばれています。
せっかくなので、example.json
に書き込んでみます。
const fs = require("fs");
function replacer(key,value){
if (key === 'Japan') {
return undefined;
}
return value;
}
var myStructure = {
Japan: {
food:"sushi",
famous_place:["Tokyo","Osaka","Nagoya"]
},
Korea: {
food:"kumuchi",
number: 999
}
};
var jsonData = JSON.stringify(myStructure,replacer);
fs.writeFileSync("./config/example.json",jsonData);
replacerでデータを選択的に取り出すことができたようです。
{"Korea":{"food":"kumuchi","number":999}}
このままではexample.json
の中身が見づらいと思います。実はもう1つ引数を追加することができて、それによってエンコードの具合が変わります。
var jsonData = JSON.stringify(myStructure,replacer,"\t");
という風に、最後に"\t"
を付け加えることで、いい感じに改行してくれます。
{
"Korea": {
"food": "kumuchi",
"number": 999
}
}
今回は以上です。