javascript - Chuyển một đối tượng thành chuỗi
Làm thế nào để tôi có thể chuyển một đối tượng JavaScript thành chuỗi?
Ví dụ :
var o = {a:1, b:2}
console.log(o)
console.log('Item: ' + o)
Đầu ra :
Đối tượng { a=1, b=2}/kết quả rất dễ đọc :)
Mục: [object Object]/không biết bên trong có gì :(
Câu trả lời #1
Tôi khuyên bạn nên sử dụng JSON.stringify, phương thức này chuyển tập hợp các biến trong đối tượng thành chuỗi JSON.
var obj = {
name: 'myObj'
};
JSON.stringify(obj);
Hầu hết các trình duyệt hiện đại đều hỗ trợ phương pháp này một cách tự nhiên, nhưng đối với những trình duyệt không hỗ trợ, bạn có thể bao gồm một phiên bản JS.
Câu trả lời #2
Sử dụng hàm String() trong javascript
String(yourobject); //returns [object Object]
hoặc stringify()
JSON.stringify(yourobject)
Câu trả lời #3
Giữ mọi thứ đơn giản với console, bạn có thể chỉ cần dùng dấu phẩy thay vì +. Dấu + sẽ cố gắng chuyển đổi đối tượng thành chuỗi, trong khi dấu phẩy sẽ hiển thị nó riêng biệt trong console.
Ví dụ :
var o = {a:1, b:2};
console.log(o);
console.log('Item: ' + o);
console.log('Item: ', o); // :)
Đầu ra :
Object { a=1, b=2} // useful
Item: [object Object] // not useful
Item: Object {a: 1, b: 2} // Best of both worlds! :)
Tham khảo: https://developer.mozilla.org/en-US/docs/Web/API/Console.log
Câu trả lời số 4
Chắc chắn, để chuyển một đối tượng thành chuỗi, bạn phải sử dụng phương pháp riêng của mình, chẳng hạn như:
function objToString (obj) {
var str = '';
for (var p in obj) {
if (Object.prototype.hasOwnProperty.call(obj, p)) {
str += p + '::' + obj[p] + '\n';
}
}
return str;
}
Thực ra, những điều trên chỉ cho thấy cách tiếp cận tổng quát; bạn có thể muốn sử dụng thứ gì đó như http://phpjs.org/functions/var_export:578 hoặc http://phpjs.org/functions/var_dump:604
hoặc, nếu bạn không sử dụng các phương thức (hàm như thuộc tính của đối tượng của bạn), bạn có thể sử dụng tiêu chuẩn mới (nhưng không được triển khai trong các trình duyệt cũ, mặc dù bạn có thể tìm một tiện ích để giúp với chúng), JSON.stringify(). Nhưng một lần nữa, điều đó sẽ không hoạt động nếu đối tượng sử dụng các hàm hoặc các thuộc tính khác mà không thể tuần tự hóa thành JSON.
Cập nhật:
Một giải pháp hiện đại hơn sẽ là:
function objToString (obj) {
let str = '';
for (const [p, val] of Object.entries(obj)) {
str += `${p}::${val}\n`;
}
return str;
}
hoặc :
function objToString (obj) {
return Object.entries(obj).reduce((str, [p, val]) => {
return `${str}${p}::${val}\n`;
}, '');
}
Câu trả lời số 5
EDIT Không sử dụng câu trả lời này vì nó chỉ hoạt động trong một số phiên bản Firefox. Không có trình duyệt khác hỗ trợ nó. Sử dụng giải pháp Gary Chambers.
toSource() là hàm mà bạn đang tìm, hàm này sẽ ghi nó ra dưới dạng JSON.
var object = {};
object.first = "test";
object.second = "test2";
alert(object.toSource());
Câu trả lời số 6
Một lựa chọn:
console.log('Item: ' + JSON.stringify(o));Một lựa chọn khác (như soktinpk đã chỉ ra trong phần bình luận), và theo ý kiến của tôi là tốt hơn cho việc gỡ lỗi trên console:
console.log('Item: ', o);Câu trả lời số 7
Không có giải pháp nào ở đây hiệu quả với tôi. JSON.stringify dường như là thứ mà nhiều người khuyên dùng, nhưng nó loại bỏ các hàm và có vẻ khá lỗi đối với một số đối tượng và mảng mà tôi đã thử khi kiểm tra.
Tôi đã tự tạo ra giải pháp của riêng mình và ít nhất nó hoạt động trên Chrome. Đăng nó lên đây để bất kỳ ai tìm kiếm trên Google cũng có thể thấy.
//Make an object a string that evaluates to an equivalent object
// Note that eval() seems tricky and sometimes you have to do
// something like eval("a = " + yourString), then use the value
// of a.
//
// Also this leaves extra commas after everything, but JavaScript
// ignores them.
function convertToText(obj) {
//create an array that will later be joined into a string.
var string = [];
//is object
// Both arrays and objects seem to return "object"
// when typeof(obj) is applied to them. So instead
// I am checking to see if they have the property
// join, which normal objects don't have but
// arrays do.
if (typeof(obj) == "object" && (obj.join == undefined)) {
string.push("{");
for (prop in obj) {
string.push(prop, ": ", convertToText(obj[prop]), ",");
};
string.push("}");
//is array
} else if (typeof(obj) == "object" && !(obj.join == undefined)) {
string.push("[")
for(prop in obj) {
string.push(convertToText(obj[prop]), ",");
}
string.push("]")
//is function
} else if (typeof(obj) == "function") {
string.push(obj.toString())
//all other values can be done with JSON.stringify
} else {
string.push(JSON.stringify(obj))
}
return string.join("")
}
EDIT: Tôi biết mã này có thể được cải thiện nhưng chưa bao giờ thực hiện được. Người dùng andrey đã đề xuất một cải tiến ở đây với nhận xét:
Đây là một đoạn mã được thay đổi một chút, có thể xử lý 'null' và 'undefined', và cũng không thêm quá nhiều dấu phẩy.
Sử dụng điều đó với rủi ro của riêng bạn vì tôi chưa kiểm tra nó chút nào. Bạn có thể thoải mái đề xuất bất kỳ cải tiến bổ sung nào dưới dạng bình luận.
Câu trả lời số 8
Nếu bạn chỉ xuất ra console, bạn có thể sử dụng console.log('string:', obj). Chú ý dấu phẩy.
Câu trả lời #9
Trong những trường hợp bạn biết đối tượng chỉ là Boolean, Date, String, number, v.v... Hàm String() trong Javascript hoạt động tốt. Gần đây tôi thấy điều này hữu ích khi xử lý các giá trị từ hàm $.each của jQuery.
Ví dụ, điều sau đây sẽ chuyển tất cả các mục trong "value" thành chuỗi:
$.each(this, function (name, value) {
alert(String(value));
});
Xem thêm chi tiết ở đây:
http://www.w3schools.com/jsref/jsref_string.asp
Câu trả lời số 10
Tôi đã tìm cái này và viết một cái đệ quy sâu với thụt lề :
function objToString(obj, ndeep) {
if(obj == null){ return String(obj); }
switch(typeof obj){
case "string": return '"'+obj+'"';
case "function": return obj.name || obj.toString();
case "object":
var indent = Array(ndeep||1).join('\t'), isArray = Array.isArray(obj);
return '{['[+isArray] + Object.keys(obj).map(function(key){
return '\n\t' + indent + key + ': ' + objToString(obj[key], (ndeep||1)+1);
}).join(',') + '\n' + indent + '}]'[+isArray];
default: return obj.toString();
}
}
Sử dụng: objToString({ a: 1, b: { c: "test" } })
Câu trả lời số 11
var obj={
name:'xyz',
Address:'123, Somestreet'
}
var convertedString=JSON.stringify(obj)
console.log("literal object is",obj ,typeof obj);
console.log("converted string :",convertedString);
console.log(" convertedString type:",typeof convertedString);
Câu trả lời số 12
Thực ra có một tùy chọn dễ dàng (cho các trình duyệt gần đây và Node.js) còn thiếu trong các câu trả lời hiện có:
console.log('Item: %o', o);
Tôi sẽ thích điều này hơn vì JSON.stringify() có một số hạn chế nhất định (ví dụ: với các cấu trúc vòng lặp).
Câu trả lời số 13
Nếu bạn chỉ muốn xem đối tượng để gỡ lỗi, bạn có thể sử dụng
var o = {a:1, b:2}
console.dir(o)
Câu trả lời #14
1.
JSON.stringify(o);
Mục: {"a":"1", "b":"2"}
2.
var o = {a:1, b:2};
var b=[]; Object.keys(o).forEach(function(k){b.push(k+":"+o[k]);});
b="{"+b.join(', ')+"}";
console.log('Item: ' + b);
Mục: {a:1, b:2}
Câu trả lời #15
Có vẻ như JSON chấp nhận tham số thứ hai có thể giúp với các hàm - replacer, điều này giải quyết vấn đề chuyển đổi một cách tinh tế nhất:
JSON.stringify(object, (key, val) => {
if (typeof val === 'function') {
return String(val);
}
return val;
});

