1行のJSONをgit diffで比較

git diffで1行にデータが詰まっているJSONをいい感じに差分表示する方法

jqをインストール

$ brew install jq

Gitの属性を付ける(*.jsonにマッチするファイルはdiffの前にjsonフィルタを通すように)

$ echo "*.json diff=json" >> .gitattributes

または

$ echo "*.json diff=json" >> .git/info/attributes

jsonフィルタを設定

$ git config diff.json.textconv "jq -S ."

あとは普通にgit diffすればOK


git diffではなくて単純に2つのファイルの差分を見たいだけならばjson-diffを使うといい

$ npm install json-diff
$ json-diff original.json modified.json

snake_caseなプロパティにcamelCaseでアクセス

とあるAPIのレスポンスJSONのキーがsnake_caseだが、JavaScript的にはcamelCaseでプロパティアクセスしたいんだよなー、みたいな話を某所で見かけた。

ES2015 Proxyを使って解決してみる。

function toSnakeCase(name) {
    name = name.replace(/([A-Z]+)([A-Z][a-z])/g, function(_, $1, $2) { return $1 + '_' + $2; });
    name = name.replace(/([^A-Z])([A-Z])/g, function(_, $1, $2) { return $1 + '_' + $2; });
    return name.toLowerCase();
}

var response = {
    hoge_fuga: "ほげふが"
};

var responseProxy = new Proxy(response, {
    get: function(target, name, receiver) {
        if (target.name !== undefined) {
            return target.name;   
        }
        return target[toSnakeCase(name)];
    }
});

console.log(responseProxy.hogeFuga);

v8にはproxyが実装されていないのでchromeやnode.jsでは無理。Firefoxならば動作する。Edgeでも動作するらしいがWindows持ってないので未確認