Unknown Region

プログラムでハマったエラーとその解決方法についての備忘録メモ

JavaScriptのヒアドキュメントについて

JavaScriptでヒアドキュメントを実現したい場合、ES6以降をサポートしていれば「`」で囲むことで実現することができる。

var str = `
hoge
fuga
`;

 

ただしES6以前の場合は利用できないので、以下のチートを利用することでそれっぽいことを実現できる。

var str = function(){
/*
hoge
fuga
*/
}.toString().split("\n").filter(function(value, index, array){return (index > 1 && array.length - 2 > index);}).join("\n");

※ 改行コードは環境によってよしなに変えてください

これでできるっちゃできるんですが、そこまでしてヒアドキュメントに拘る理由はあまりないかも。

 

JSONのObjectとArrayの違いにご注意

まず、JSONについては以下のページが参考になるかと思います。

ja.wikipedia.org

 

JSONは基本的に以下のようなフォーマットで提供されます。

例: サンプルJSON(Object)

{
"hoge": "fuga"
}

このJSONの場合、JavaScriptJSON.parse(string)などで解釈させると、Objectとして認識できます。

ただし、Objectの他にArrayとしてもJSONを書くこともできるので注意が必要です。

例: サンプルJSON(Array)

[
"hoge", "fuga"
]

このJSONの場合、JavaScriptJSON.parse(string)などで解釈させると、Arrayとして認識できます。

つまり、単純にJSONと言ってもパース後にObjectになるのかArrayになるのか注意が必要ですね。

RESTfulなAPIを利用する場合、しっかりとフォーマットを確認することが重要です。

また、APIを設計する場合もこの辺りはしっかりとレスポンスのフォーマットを定義しておく必要がありますね。

 

 

余談ですが、派生としてJSONLというフォーマットもあります。

こちらは1行に1つの完結したJSONが格納されるもので、複数のJSONを改行コード区切りで持つことができます。

JSONでは構造の中で改行コードを特に気にしませんが、こちらでは各行に格納されるそれぞれのJSONの中に改行コードを含めてはいけません。

そして、この書式の場合はJSON.parse(string)では一発では変換できませんのでご注意を。

例: サンプルJSONP

{"hoge": "fuga"}
{"foo","bar"}

 

例: JSONLでの値の取り出しサンプル(JavaScript)

var jsonl = '{"hoge": "fuga"}\n{"foo","bar"}';
var jsons = jsonl.split("\n").map(function(line){ return JSON.parse(line); });

※ 改行コードに注意