latest log

酩酊状態で書いたエンジニアポエムです。酩酊状態で読んでください。

JSONを設定ファイル代わりに使う場合は JSON.parse → だめなら → eval のように二段階で評価するといいんじゃないかな

JSON.parse があまりにも眼鏡委員長なので、JSON.parse でエラーが出たら黒ギャル eval("(" + … + ")") で試す的なコードいれたらストレス減った

via https://twitter.com/uupaa/status/294711990000168960

あ、さっきのJSONスタイルで書く設定ファイルのバリデーションの事ね。ユーザが設定ファイルにありがちなコメント( /* */ や // )いれてたり、 ハッシュの末尾のカンマ消し忘れてるだけでエラーで弾くのは忍びないので、 eval で jsとして評価して正しければOKでしょと

via
https://twitter.com/uupaa/status/294713049221324800

JSON を設定ファィル代わりに使うプロダクト多いけど、JSON.parse は些細なことでもエラーで弾くので、eval で評価して問題なければ、大抵はそれでいいと思うんだけど

via https://twitter.com/uupaa/status/294713369628385280

JSON.parse('{ key: "value" }') は key を "key" にしないとエラーだけど、 eval("(" + '{ key: "value" }' + ")") は js として正しいので、ユーザが key を "key" とタイプしなかっただけでエラーになるストレスからも解放される

via https://twitter.com/uupaa/status/294714383660118016

eval した後の object を JSON.stringify(object, "", 2); などで吐き出せば、2個スペースのインデント付きで正規化されたJSONになるので、ファイルをそれで上書きするか、正規化されたものを次回から使ってもらえば色々捗る的な

via https://twitter.com/uupaa/status/294714711256203264

var fs = require("fs");

var minify = false;
var json = validateJSON( fs.readFileSync("hoge.json", "UTF-8") );

fs.writeFileSync("hoge.json", minify ? JSON.stringify(json)
                                     : JSON.stringify(json, "", 2));

// JSON の評価を行う、JSON.parseでエラーになる場合は、jsとしてevalする
function validateJSON(text) {
    var obj = null;

    try {
        obj = JSON.parse( text );
        return obj;
    } catch (O_o) {
        ;
    }
    // try eval(text)
    try {
        obj = eval("(" + text + ")");
    } catch (o_O) {
        console.log("ERROR. JSON.parse failed");
        return null;
    }
    console.log("WARN. As a result of JSON.parse, a trivial problem has occurred");
    return obj; // repaired
}

(ε・◇・)з o O ( いいんじゃないかな!