JSON a volcado de variable de cadena

82

¿Existe una función rápida para convertir los objetos JSON recibidos a través jQuery getJSONde un volcado de variable de cadena (con fines de seguimiento / depuración)?

en un
fuente
5
Pregunta tonta: ¿por qué se marcó esto como spam?
ina
1
por la misma razón que mis preguntas reciben votos negativos, ¡a veces los usuarios no son precisos con sus clics!
Toni Leigh

Respuestas:

121

Sí, JSON.stringifyse puede encontrar aquí , está incluido en Firefox 3.5.4 y superior.

Un stringifier JSON va en la dirección opuesta, convirtiendo las estructuras de datos JavaScript en texto JSON. JSON no admite estructuras de datos cíclicas, así que tenga cuidado de no dar estructuras cíclicas al stringifier JSON. https://web.archive.org/web/20100611210643/http://www.json.org/js.html

var myJSONText = JSON.stringify(myObject, replacer);
Anders
fuente
1
También está incluido en Chrome, pero tienes un (enorme) 404 en ese enlace de json.org
Dean Rather
1
Si solo desea registrar datos con esto solo: console.log (JSON.stringify (data, null)); pase null si no necesita una función de reemplazo.
Elliotrock
29

Puede usar console.log()en Firebug o Chrome para obtener una buena vista de objetos aquí, como este:

$.getJSON('my.json', function(data) {
  console.log(data);
});

Si solo desea ver la cadena, mire la vista de recursos en Chrome o la vista de red en Firebug para ver la respuesta de cadena real del servidor (no es necesario convertirla ... la recibió de esta manera).

Si desea tomar esa cadena y dividirla para verla fácilmente, hay una excelente herramienta aquí: http://json.parser.online.fr/

Nick Craver
fuente
Es útil agregar un controlador de errores, de lo contrario getJSONfallará silenciosamente y tendrá dificultades para entender por qué no funciona: agregar .fail(function(jqxhr, status, error) { alert(status + ", " + error);}).
Skippy le Grand Gourou
13

Yo personalmente uso mucho el plugin jquery dump para volcar objetos, es un poco similar a la función print_r () de php Uso básico:

var obj = {
            hubba: "Some string...",
            bubba: 12.5,
            dubba: ["One", "Two", "Three"]
        }
$("#dump").append($.dump(obj));
/* will return:
Object { 
     hubba: "Some string..."
     bubba: 12.5
     dubba: Array ( 
          0 => "One"
          1 => "Two"
          2 => "Three"
     )
}
*/

Es muy legible por humanos, también recomiendo este sitio http://json.parser.online.fr/ para crear / analizar / leer json, porque tiene colores agradables

Corbatas
fuente
1
esto es realmente genial, pero requiere la instalación de otro complemento (y solo para depuración)
en
sí, lo sé ... pero cuando estoy buscando respuestas, a menudo encuentro algo útil en las respuestas porque mi problema se relaciona con el problema. este complemento podría ser un poco exagerado cuando solo tiene un problema simple: P
Ties
4

Aquí está el código que utilizo. Debería poder adaptarlo a sus necesidades.

function process_test_json() {
  var jsonDataArr = { "Errors":[],"Success":true,"Data":{"step0":{"collectionNameStr":"dei_ideas_org_Private","url_root":"http:\/\/192.168.1.128:8500\/dei-ideas_org\/","collectionPathStr":"C:\\ColdFusion8\\wwwroot\\dei-ideas_org\\wwwrootchapter0-2\\verity_collections\\","writeVerityLastFileNameStr":"C:\\ColdFusion8\\wwwroot\\dei-ideas_org\\wwwroot\\chapter0-2\\VerityLastFileName.txt","doneFlag":false,"state_dbrec":{},"errorMsgStr":"","fileroot":"C:\\ColdFusion8\\wwwroot\\dei-ideas_org\\wwwroot"}}};

  var htmlStr= "<h3 class='recurse_title'>[jsonDataArr] struct is</h3> " + recurse( jsonDataArr );
  alert( htmlStr );
  $( document.createElement('div') ).attr( "class", "main_div").html( htmlStr ).appendTo('div#out');
  $("div#outAsHtml").text( $("div#out").html() ); 
}
function recurse( data ) {
  var htmlRetStr = "<ul class='recurseObj' >"; 
  for (var key in data) {
        if (typeof(data[key])== 'object' && data[key] != null) {
            htmlRetStr += "<li class='keyObj' ><strong>" + key + ":</strong><ul class='recurseSubObj' >";
            htmlRetStr += recurse( data[key] );
            htmlRetStr += '</ul  ></li   >';
        } else {
            htmlRetStr += ("<li class='keyStr' ><strong>" + key + ': </strong>&quot;' + data[key] + '&quot;</li  >' );
        }
  };
  htmlRetStr += '</ul >';    
  return( htmlRetStr );
}

</script>
</head><body>
<button onclick="process_test_json()" >Run process_test_json()</button>
<div id="out"></div>
<div id="outAsHtml"></div>
</body>
usuario579338
fuente
2

algo a lo largo de esto?

function dump(x, indent) {
    var indent = indent || '';
    var s = '';
    if (Array.isArray(x)) {
        s += '[';
        for (var i=0; i<x.length; i++) {
            s += dump(x[i], indent)
            if (i < x.length-1) s += ', ';
        }
        s +=']';
    } else if (x === null) {
      s = 'NULL';
    } else switch(typeof x) {
        case 'undefined':
            s += 'UNDEFINED';
            break;
        case 'object':
            s += "{ ";
            var first = true;
            for (var p in x) {
                if (!first) s += indent + '  ';
                s += p + ': ';
                s += dump(x[p], indent + '  ');
                s += "\n"
                first = false;
            }
            s += '}';
            break;
        case 'boolean':
            s += (x) ? 'TRUE' : 'FALSE';
            break;
        case 'number':
            s += x;
            break;
        case 'string':
            s += '"' + x + '"';
            break;
        case 'function':
            s += '<FUNCTION>';
            break;
        default:
            s += x;
            break;
    }
    return s;
}
hotzen
fuente