Dar formato a código JSON

Con la siguiente función podemos hacer nuestro JSON más legible, muy útil cuando estamos haciendo debug, ya que si nuestros objetos JSON son muy largos en ocasiones leerlos resulta todo un desafío

function FormatJSON(oData, sIndent)
{
    if (arguments.length < 2)
    {
        var sIndent = "";
    }

    var sIndentStyle = "    ";
    var sDataType = RealTypeOf(oData);

    if (sDataType == "array")
    {
        if (oData.length == 0)
        {
            return "[]";
        }
        var sHTML = "[";
    } else
    {
        var iCount = 0;
        $.each(oData, function()
        {
            iCount++;
            return;
        });
        if (iCount == 0)
        {
            return "{}";
        }
        var sHTML = "{";
    }

    var iCount = 0;

    $.each(oData, function(sKey, vValue)
    {
        if (iCount > 0)
        {
            sHTML += ",";
        }
        if (sDataType == "array")
        {
            sHTML += ("\n" + sIndent + sIndentStyle);
        } else
        {
            sHTML += ("\n" + sIndent + sIndentStyle + "\"" + sKey + "\"" + ": ");
        }

        switch (RealTypeOf(vValue))
        {
            case "array":
            case "object":
                sHTML += FormatJSON(vValue, (sIndent + sIndentStyle));
                break;
            case "boolean":
            case "number":
                sHTML += vValue.toString();
                break;
            case "null":
                sHTML += "null";
                break;
            case "string":
                sHTML += ("\"" + vValue + "\"");
                break;
            default:
                sHTML += ("TYPEOF: " + typeof (vValue));
        }

        iCount++;
    });

    if (sDataType == "array")
    {
        sHTML += ("\n" + sIndent + "]");
    } else
    {
        sHTML += ("\n" + sIndent + "}");
    }

    return sHTML;
}

function RealTypeOf(v)
{
    if (typeof (v) == "object")
    {
        if (v === null) return "null";
        if (v.constructor == (new Array).constructor) return "array";
        if (v.constructor == (new Date).constructor) return "date";
        if (v.constructor == (new RegExp).constructor) return "regex";
        return "object";
    }
    return typeof (v);
}

No hay comentarios

Agregar comentario