JSON'dan dize değişken dökümüne


82

Üzerinden alınan JSON nesnelerini jQuery getJSONdize değişken dökümüne dönüştürmek için hızlı bir işlev var mı (izleme / hata ayıklama amaçları için)?


5
Aptalca soru - bu neden spam olarak işaretlendi?
ina

1
Aynı sebepten dolayı sorularım olumsuz oy alıyor, bazen kullanıcılar tıklamalarında yanlış oluyor!
Toni Leigh

Yanıtlar:


121

Evet, buradaJSON.stringify bulunabilir , Firefox 3.5.4 ve üzeri sürümlere dahildir .

JSON dizgeci ters yönde hareket ederek JavaScript veri yapılarını JSON metnine dönüştürür. JSON döngüsel veri yapılarını desteklemez, bu nedenle JSON dizgecisine döngüsel yapılar vermemeye dikkat edin. https://web.archive.org/web/20100611210643/http://www.json.org/js.html

var myJSONText = JSON.stringify(myObject, replacer);

1
Chrome'a ​​da dahil, ancak json.org bağlantısında (çok büyük) bir 404 var
Dean,

1
Sadece bununla verileri günlüğe kaydetmek istiyorsanız: console.log (JSON.stringify (data, null)); değiştirme işlevine ihtiyacınız yoksa null geçirin!
elliotrock

29

Sen kullanabilirsiniz console.log()böyle, buradan iyi bir nesne görünüm elde etmek için Firebug veya Chrome'da:

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

Yalnızca dizeyi görüntülemek istiyorsanız , sunucudan gelen gerçek dize yanıtını görmek için Chrome'daki Kaynak görünümüne veya Firebug'daki Net görünümüne bakın (dönüştürmenize gerek yok ... bu şekilde aldınız).

Bu dizeyi almak ve kolay görüntüleme için parçalamak istiyorsanız, burada mükemmel bir araç var: http://json.parser.online.fr/


Bir hata işleyicisi eklemek faydalıdır, aksi takdirde getJSONsessizce başarısız olur ve neden çalışmadığını anlamakta zorlanacaksınız: ekleyin .fail(function(jqxhr, status, error) { alert(status + ", " + error);}).
Skippy le Grand Gourou

13

Ben şahsen jquery dump eklentisini nesneleri dökmek için kullanıyorum, php'nin print_r () işlevine biraz benziyor Temel kullanım:

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"
     )
}
*/

İnsan tarafından okunabilir, bu siteyi http://json.parser.online.fr/ json oluşturmak / ayrıştırmak / okumak için tavsiye ediyorum, çünkü güzel renkleri var


1
Bu gerçekten büyük, ama (ve sadece hata ayıklama için) henüz başka bir eklenti yüklemeden gerektirir
ina

evet, biliyorum ... ama cevap ararken genellikle cevaplarda yararlı bir şeyler buluyorum çünkü problemim problemle ilgili. Bu eklenti, sadece basit bir probleminiz olduğunda biraz fazla olabilir: P
Ties

4

İşte kullandığım kod. İhtiyaçlarınıza göre uyarlayabilmelisiniz.

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>

2

bununla ilgili bir şey mi var?

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;
}
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.