JSONを見やすく展開してFirebugとかで表示 - JSONDecoder.js

コメントと更新履歴はゼロと無限の間のログ » JSONDecoderでどうぞ。

JSONって見づらいので展開してコンソールで見れたらいいなと思って作った。
出力先がFirebugのコンソールだけだと不便な場合もあるので、Webページ上に書き出したり文字列として返したりもできるようにした。

また、貧弱なJavaScriptのtypeofの拡張としてJSONDecoder.typeOf()も実装した。(JSONDecoder.typeofだとIEでエラーになる!)

サンプル

ソースコード

/**
 *    @version 0.1.1
 */
var JSONDecoder = {};
 
/**
 *    typeofの拡張
 *    ArrayとかRegExpとかnullとかも判別する
 */
JSONDecoder.typeOf = function(value) {
    var type = typeof value;
    switch (type) {
        case "object":
            if (value instanceof Array) {
                type = "array";
            } else if (!(value instanceof Object)) {
                type = "null";
            }
            //no break
        case "function":
            if (value instanceof RegExp) {
                type = "regexp";
            }
            break;
    }
    return type;
}
/**
 *    JSONをFirebugのコンソールに書き出す
 */
JSONDecoder.toConsole = function(json) {
    JSONDecoder.out = function(line) { console.log(line); };
    JSONDecoder.decode("", json, "");
}
/**
 *    JSONをWebページ上に書き出す
 */
JSONDecoder.write = function(json) {
    document.write("<pre>" + JSONDecoder.toString(json) + "</pre>");
}
/**
 *    JSONをalertダイアログで表示する
 */
JSONDecoder.alert = function(json) {
    alert(JSONDecoder.toString(json));
}
/**
 *    JSONを見やすい文字列に変換する
 */
JSONDecoder.toString = function(json) {
    var decoded = "";
    JSONDecoder.out = function(line) { decoded += (line + "\n"); };
    JSONDecoder.decode("", json, "");
    return decoded;
}
/**
 *    JSONを解析する
 */
JSONDecoder.decode = function(index, value, indent) {
    var type = JSONDecoder.typeOf(value);
    var pack = undefined;
 
    switch (type) {    //型別に見やすくする
        case "object" :
            pack = ["{", "}"];
            break;
        case "array" :
            pack = ["[", "]"];
            break;
        case "function" :
            type = "";
            //no break
        case "string" :
            value = value.toString().replace(/\n/g, "\n" + indent);    //全体をインデント
            break;
        case "undefined" :
            type = "";
            value = "undefined";
            break;
        case "null" :
            type = "";
            value = "null";
            break;
    }
 
    if (type) {
        type = " (" + type + ")";    //整形
    }
 
    if (pack) {    //子要素がある場合は再帰処理
        JSONDecoder.out(indent + index + type + pack[0]);
        for (var i in value) {
            JSONDecoder.decode(i, value[i], indent + "\t");
        }
        JSONDecoder.out(indent + pack[1]);
    } else {
        JSONDecoder.out(indent + index + type + ": " + value);
    }
}
/**
 *    文字列をObjectに変換する
 */
JSONDecoder.str2json = function(str) {
	try {
	    eval("var json = " + str + ";");
	    return json;
	} catch (e) {
		return false;
	}
}
Wiki内アクセスランキング
www.chimeric.de Driven by DokuWiki Recent changes RSS feed