Pregunta Convirtiendo un objeto en una cadena


¿Cómo puedo convertir un objeto de JavaScript en una cadena?

Ejemplo:

var o = {a:1, b:2}
console.log(o)
console.log('Item: ' + o)

Salida:

Objeto {a = 1, b = 2} // salida de lectura muy agradable :)
  Artículo: [object Object] // sin idea de lo que hay adentro :(


793
2018-04-10 15:35


origen


Respuestas:


Yo recomendaría usar JSON.stringify, que convierte el conjunto de las variables en el objeto en una cadena JSON. La mayoría de los navegadores modernos admiten este método de forma nativa, pero para aquellos que no lo hacen, puede incluir un Versión JS:

var obj = {
  name: 'myObj'
};

JSON.stringify(obj);

1110
2018-04-10 15:44



Use la función javascript String ().

 String(yourobject); //returns [object Object]

o

JSON.stringify(yourobject)

.


82
2018-04-15 11:07



Claro, para convertir un objeto en una cadena, debe usar su propio método, como:

function objToString (obj) {
    var str = '';
    for (var p in obj) {
        if (obj.hasOwnProperty(p)) {
            str += p + '::' + obj[p] + '\n';
        }
    }
    return str;
}

En realidad, lo anterior solo muestra el enfoque general; es posible que desee usar algo como http://phpjs.org/functions/var_export:578 o http://phpjs.org/functions/var_dump:604

o, si no está usando métodos (funciones como propiedades de su objeto), puede usar el nuevo estándar (pero no implementado en navegadores más antiguos, aunque puede encontrar una utilidad que también lo ayude), JSON .stringify (). Pero nuevamente, eso no funcionará si el objeto usa funciones u otras propiedades que no son serializables a JSON.


80
2018-04-10 15:49



Manteniéndolo simple con console, puedes usar una coma en lugar de una +. los + intentará convertir el objeto en una cadena, mientras que la coma lo mostrará por separado en la consola.

Ejemplo:

var o = {a:1, b:2};
console.log(o);
console.log('Item: ' + o);
console.log('Item: ', o);   // :)

Salida:

Object { a=1, b=2}           // useful
Item: [object Object]        // not useful
Item:  Object {a: 1, b: 2}   // Best of both worlds! :)

Referencia: https://developer.mozilla.org/en-US/docs/Web/API/Console.log


63
2018-01-07 16:23



EDITAR  No use esta respuesta ya que no funciona en Internet Explorer. Utilizar Gary Chambers solución.

a la fuente() es la función que está buscando y la escribirá como JSON.

var object = {};
object.first = "test";
object.second = "test2";
alert(object.toSource());

32
2018-04-10 15:40



Una opción:

console.log('Item: ' + JSON.stringify(o));

o is printed as a string

Otra opción (como soktinpk señalado en los comentarios), y mejor para la depuración de la consola IMO:

console.log('Item: ', o);

o is printed as an object, which you could drill down if you had more fields


28
2018-06-19 05:42



Ninguna de las soluciones aquí funcionó para mí. JSON.stringify parece ser lo que mucha gente dice, pero corta las funciones y parece bastante roto para algunos objetos y arreglos que probé al probarlo.

Hice mi propia solución que funciona en Chrome al menos. Publicarlo aquí para que cualquiera que lo vea en Google pueda encontrarlo.

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

EDITAR: Sé que este código se puede mejorar, pero nunca lo hice. El usuario andrey sugirió una mejora aquí con el comentario:

Aquí hay un código ligeramente modificado, que puede manejar 'nulo' e 'indefinido', y tampoco agrega comas excesivas.

Úselo bajo su propio riesgo ya que no lo he verificado en absoluto. Siéntase libre de sugerir cualquier mejora adicional como comentario.


20
2017-08-21 22:44



Si solo está enviando a la consola, puede usar console.log('string:', obj). Observe la coma.


17
2017-08-14 12:53



En los casos en que sabe que el objeto es solo un booleano, fecha, cadena, número, etc ... La función javascript String () funciona bien. Recientemente encontré esto útil al tratar con valores provenientes de la función $ .each de jquery.

Por ejemplo, lo siguiente convertiría todos los elementos en "valor" a una cadena:

$.each(this, function (name, value) {
  alert(String(value));
});

Más detalles aquí:

http://www.w3schools.com/jsref/jsref_string.asp


13
2017-07-11 04:12



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);

13
2018-05-08 12:06



Estaba buscando esto, y escribí uno recursivo profundo con sangría:

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();
  }
}

Uso: objToString({ a: 1, b: { c: "test" } })


10
2017-11-18 22:57