JSON để kết xuất biến chuỗi


82

Có một chức năng nhanh chóng để chuyển đổi các đối tượng JSON nhận được qua jQuery getJSONmột kết xuất biến chuỗi (cho mục đích truy tìm / gỡ lỗi) không?


5
Câu hỏi ngớ ngẩn - tại sao điều này bị gắn cờ là thư rác?
ina

1
vì lý do tương tự mà câu hỏi của tôi nhận được phiếu bầu thấp, đôi khi người dùng nhấp chuột không chính xác!
Toni Leigh

Câu trả lời:


121

Có, bạn JSON.stringifycó thể tìm thấy ở đây , nó trong Firefox 3.5.4 trở lên.

Trình định nghĩa chuỗi JSON đi theo hướng ngược lại, chuyển đổi cấu trúc dữ liệu JavaScript thành văn bản JSON. JSON không hỗ trợ cấu trúc dữ liệu tuần hoàn, vì vậy hãy cẩn thận để không cung cấp cấu trúc tuần hoàn cho trình định nghĩa chuỗi JSON. https://web.archive.org/web/20100611210643/http://www.json.org/js.html

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

1
Nó cũng được bao gồm trong chrome, nhưng bạn có một (rất lớn) 404 trên liên kết json.org đó
Dean Rather

1
Nếu bạn chỉ muốn ghi dữ liệu bằng cái này: console.log (JSON.stringify (data, null)); vượt qua null nếu bạn không cần hàm thay thế!
elliotrock

29

Bạn có thể sử dụng console.log()trong Firebug hoặc Chrome để có chế độ xem đối tượng tốt ở đây, như sau:

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

Nếu bạn chỉ muốn xem chuỗi, hãy xem chế độ xem Tài nguyên trong Chrome hoặc chế độ xem Mạng trong Firebug để xem phản hồi chuỗi thực tế từ máy chủ (không cần chuyển đổi nó ... bạn đã nhận được nó theo cách này).

Nếu bạn muốn lấy chuỗi đó và chia nhỏ để dễ xem, có một công cụ tuyệt vời ở đây: http://json.parser.online.fr/


Sẽ rất hữu ích nếu bạn thêm một trình xử lý lỗi, nếu không getJSONsẽ không hoạt động một cách âm thầm và bạn sẽ khó hiểu tại sao nó không hoạt động: add .fail(function(jqxhr, status, error) { alert(status + ", " + error);}).
Skippy le Grand Gourou

13

cá nhân tôi sử dụng plugin jquery dump rất nhiều để kết xuất các đối tượng, nó hơi giống với hàm print_r () của php Cách sử dụng cơ bản:

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

Nó rất dễ đọc cho con người, tôi cũng giới thiệu trang web này http://json.parser.online.fr/ để tạo / phân tích cú pháp / đọc json, vì nó có màu sắc đẹp


1
đây là thực sự tuyệt vời, nhưng nó đòi hỏi phải cài đặt thêm một plugin (và chỉ cho debug)
ina

vâng, tôi biết ... nhưng khi tôi tìm kiếm câu trả lời, tôi thường tìm thấy điều gì đó hữu ích trong câu trả lời vì vấn đề của tôi liên quan đến vấn đề. Plugin này thực sự có thể là một overkill chút khi bạn chỉ có một vấn đề đơn giản: P
Ties

4

Đây là mã tôi sử dụng. Bạn sẽ có thể điều chỉnh nó cho phù hợp với nhu cầu của bạn.

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

cái gì đó dọc theo cái này?

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;
}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.