¿Cómo puedo convertir un objeto 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 legible muy agradable :)
Elemento: [objeto Objeto] // no tengo idea de qué hay dentro :(
javascript
string
object
serialization
tostring
usuario680174
fuente
fuente
console.log("Item", obj);
. No hay necesidad de nada complicado.Respuestas:
Recomendaría usar
JSON.stringify
, que convierte el conjunto de variables en el objeto a 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 una versión JS :fuente
foo: function () {...}
.JSON.stringify(obj, null, 2);
para una salida más bonita.El uso de JavaScript String () la función
o stringify ()
fuente
JSON.stringify(yourobject)
mucama mi dia!Claro, para convertir un objeto en una cadena, debe usar su propio método, como:
En realidad, lo anterior solo muestra el enfoque general; es posible que desee utilizar algo como http://phpjs.org/functions/var_export:578 o http://phpjs.org/functions/var_dump:604
o, si no está utilizando métodos (funciones como propiedades de su objeto), puede utilizar el nuevo estándar (pero no está implementado en navegadores más antiguos, aunque también puede encontrar una utilidad para ayudarlo con ellos), JSON .stringify (). Pero nuevamente, eso no funcionará si el objeto usa funciones u otras propiedades que no son serializables para JSON.
fuente
Manteniéndolo simple con
console
, puedes usar una coma en lugar de una+
. El+
tratará de convertir el objeto en una cadena, mientras que la coma se mostrará por separado en la consola.Ejemplo:
Salida:
Referencia: https://developer.mozilla.org/en-US/docs/Web/API/Console.log
fuente
console.log(o)
:? Dado que si intenta registrar un objeto agregado a una cadena, en realidad llamatoString()
al objeto.console.log
finalmente llama a algo llamado loPrinter
que la especificación señala: "La forma en que la implementación imprime args depende de la implementación", lo que significa que cada navegador puede hacer esto de manera diferente (consulte console.spec.whatwg.org/#printer ). Firefox mostrará los objetos como una cadena, pero de buen color. Chrome mostrará el objeto como un grupo interactivo que puede expandir para ver las propiedades. ¡Darle una oportunidad!console.log('Item: ', o);
sigue siendoItem: [object Object]
.console.log
usar, puedeconsole.dir(o)
imprimir el objeto javascript para imprimirlo como una cadena. En las herramientas de desarrollador, esto permite abrir el objeto y verificar todas las propiedades, incluso las matrices. (ver: developer.mozilla.org/de/docs/Web/API/Console/dir )EDITAR No use esta respuesta ya que no funciona en Internet Explorer. Use la solución de Gary Chambers .
toSource () es la función que está buscando que lo escribirá como JSON.
fuente
toSource()
no funciona en IE.toSource()
no es un estándar reconocido, por lo que no se puede garantizar que sea compatible con todos los navegadoresUna opción :
console.log('Item: ' + JSON.stringify(o));
Otra opción (como soktinpk señaló en los comentarios), y mejor para la depuración de la consola IMO:
console.log('Item: ', o);
fuente
Ninguna de las soluciones aquí funcionó para mí. JSON.stringify parece ser lo que mucha gente dice, pero corta funciones y parece bastante roto para algunos objetos y matrices que probé al probarlo.
Hice mi propia solución que funciona en Chrome al menos. Publicarlo aquí para que cualquiera que busque esto en Google pueda encontrarlo.
EDITAR: Sé que este código se puede mejorar, pero nunca lo logré. El usuario andrey sugirió una mejora aquí con el comentario:
Use eso bajo su propio riesgo ya que no lo he verificado en absoluto. No dude en sugerir mejoras adicionales como comentario.
fuente
,
al final de cada objeto / matriz.Si solo está enviando a la consola, puede usar
console.log('string:', obj)
. Observe la coma .fuente
console.log
menudo se muestra después de que AJAX ha terminado de suministrar datos a la matriz en paralelo, lo que conduce a resultados engañosos. En tales casos, la clonación o la serialización de objetos es el camino a seguir: dado que registramos objetos duplicados, incluso cuando AJAX termina su trabajo, llenará datos "antiguos".En los casos en que sabe que el objeto es solo un Booleano, Fecha, Cadena, número, etc. La función String () de JavaScript funciona bien. Recientemente encontré esto útil al tratar con valores que provienen de la función $ .each de jquery.
Por ejemplo, lo siguiente convertiría todos los elementos en "valor" en una cadena:
Más detalles aquí:
http://www.w3schools.com/jsref/jsref_string.asp
fuente
var my_string = ''+value+'';
fuente
Estaba buscando esto, y escribí uno profundo recursivo con sangría:
Uso:
objToString({ a: 1, b: { c: "test" } })
fuente
if(ndeep > MAX_DEPTH_LEVEL){ return '...'; }
la función, con MAX_DEPTH_LEVEL como el número máximo elegido de capas de objetos para excavar.Si solo desea ver el objeto para la depuración, puede usar
fuente
1)
2)
fuente
Los métodos JSON son bastante inferiores a los del motor Gecko .toSource () primitivo.
Consulte la respuesta del artículo SO para ver las pruebas de comparación.
Además, la respuesta anterior se refiere a http://forums.devshed.com/javascript-development-115/tosource-with-arrays-in-ie-386109.html que, como JSON, (que el otro artículo http: // www.davidpirek.com/blog/object-to-string-how-to-deserialize-json utiliza a través del "Código fuente de codificación ExtJs JSON" ) no puede manejar referencias circulares y está incompleto. El siguiente código muestra sus limitaciones (falsificaciones) (corregidas para manejar matrices y objetos sin contenido).
( enlace directo al código en //forums.devshed.com/ ... / tosource-with-arrays-in-ie-386109 )
que muestra:
y
y
fuente
En realidad, falta una opción fácil (para navegadores recientes y Node.js) en las respuestas existentes:
Preferiría esto ya que
JSON.stringify()
tiene ciertas limitaciones (por ejemplo, con estructuras circulares).fuente
Parece que JSON acepta el segundo parámetro que podría ayudar con las funciones: reemplazante , esto resuelve el problema de la conversión de la manera más elegante:
fuente
Si solo le interesan las cadenas, los objetos y las matrices:
fuente
stringify-object
es una buena biblioteca de npm hecha por el equipo de yeoman: https://www.npmjs.com/package/stringify-objectentonces:
Obviamente, es interesante solo si tiene un objeto circular que fallaría con
JSON.stringify();
fuente
Echa un vistazo al complemento jQuery-JSON
En esencia, utiliza JSON.stringify pero recurre a su propio analizador si el navegador no lo implementa.
fuente
Como firefox no stringifica algún objeto como objeto de pantalla; si quieres tener el mismo resultado como
JSON.stringify(obj)
:fuente
Para objetos no anidados:
fuente
Dado que Javascript v1.0 funciona en todas partes (incluso IE), este es un enfoque nativo y permite una apariencia muy costosa de su objeto durante la depuración y la producción https://developer.mozilla.org/en/docs/Web/JavaScript/Reference / Global_Objects / Object / toString
Ejemplo útil
Además, como un bono
fuente
Si puede usar lodash, puede hacerlo de esta manera:
Con lodash
map()
puedes iterar sobre objetos también. Esto asigna cada entrada de clave / valor a su representación de cadena:Y
join()
junte las entradas de la matriz.Si puede usar la cadena de plantilla ES6, esto también funciona:
Tenga en cuenta que esto no es recursivo a través del objeto:
Al igual que los nodos
util.inspect()
harán:fuente
Si está utilizando el framework Dojo javascript, entonces ya hay una función de compilación para hacer esto: dojo.toJson () que se usaría así.
que devolverá una cadena. Si desea convertir el objeto a datos json, agregue un segundo parámetro de verdadero.
http://dojotoolkit.org/reference-guide/dojo/toJson.html#dojo-tojson
fuente
ejemplo a usar:
your_object1.txt:
your_object2.txt:
fuente
Para su ejemplo, creo
console.log("Item:",o)
que sería más fácil. Pero,console.log("Item:" + o.toString)
también funcionaría.El uso del método número uno usa un buen menú desplegable en la consola, por lo que un objeto largo funcionaría bien.
fuente
fuente
Espero que este ejemplo ayude a todos aquellos que trabajan en una variedad de objetos.
fuente
Si no vas a unir, únete () a Object.
fuente
Referencias circulares
Al usar el sustituto a continuación , podemos producir JSON menos redundantes, si el objeto fuente contiene múltiples referencias a algún objeto, o contiene referencias circulares, entonces lo hacemos mediante una cadena de ruta especial (similar a JSONPath ), lo usamos de la siguiente manera
Mostrar fragmento de código
BONIFICACIÓN : y aquí está la función inversa de dicha serialización
Mostrar fragmento de código
fuente