Tengo un enlace que abre datos JSON en el navegador, pero desafortunadamente no tengo ni idea de cómo leerlo. ¿Hay alguna forma de convertir estos datos usando JavaScript en formato CSV y guardarlos en un archivo JavaScript?
Los datos se ven así:
{
"count": 2,
"items": [{
"title": "Apple iPhone 4S Sale Cancelled in Beijing Amid Chaos (Design You Trust)",
"description": "Advertise here with BSA Apple cancelled its scheduled sale of iPhone 4S in one of its stores in China\u2019s capital Beijing on January 13. Crowds outside the store in the Sanlitun district were waiting on queues overnight. There were incidents of scuffle between shoppers and the store\u2019s security staff when shoppers, hundreds of them, were told that the sales [...]Source : Design You TrustExplore : iPhone, iPhone 4, Phone",
"link": "http:\/\/wik.io\/info\/US\/309201303",
"timestamp": 1326439500,
"image": null,
"embed": null,
"language": null,
"user": null,
"user_image": null,
"user_link": null,
"user_id": null,
"geo": null,
"source": "wikio",
"favicon": "http:\/\/wikio.com\/favicon.ico",
"type": "blogs",
"domain": "wik.io",
"id": "2388575404943858468"
}, {
"title": "Apple to halt sales of iPhone 4S in China (Fame Dubai Blog)",
"description": "SHANGHAI \u2013 Apple Inc said on Friday it will stop selling its latest iPhone in its retail stores in Beijing and Shanghai to ensure the safety of its customers and employees. Go to SourceSource : Fame Dubai BlogExplore : iPhone, iPhone 4, Phone",
"link": "http:\/\/wik.io\/info\/US\/309198933",
"timestamp": 1326439320,
"image": null,
"embed": null,
"language": null,
"user": null,
"user_image": null,
"user_link": null,
"user_id": null,
"geo": null,
"source": "wikio",
"favicon": "http:\/\/wikio.com\/favicon.ico",
"type": "blogs",
"domain": "wik.io",
"id": "16209851193593872066"
}]
}
Lo más cercano que pude encontrar fue: Convertir formato JSON a formato CSV para MS Excel
Pero se descarga en un archivo CSV, lo guardo en una variable, todos los datos convertidos.
También me gustaría saber cómo cambiar los caracteres de escape: '\u2019'
volver a la normalidad.
Probé este código:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>JSON to CSV</title>
<script src="http://code.jquery.com/jquery-1.7.1.js" type="text/javascript"></script>
<script type="text/javascript">
var json3 = {
"count": 2,
"items": [{
"title": "Apple iPhone 4S Sale Cancelled in Beijing Amid Chaos (Design You Trust)",
"description": "Advertise here with BSA Apple cancelled its scheduled sale of iPhone 4S in one of its stores in China’s capital Beijing on January 13. Crowds outside the store in the Sanlitun district were waiting on queues overnight. There were incidents of scuffle between shoppers and the store’s security staff when shoppers, hundreds of them, were told that the sales [...]Source : Design You TrustExplore : iPhone, iPhone 4, Phone",
"link": "http://wik.io/info/US/309201303",
"timestamp": 1326439500,
"image": null,
"embed": null,
"language": null,
"user": null,
"user_image": null,
"user_link": null,
"user_id": null,
"geo": null,
"source": "wikio",
"favicon": "http://wikio.com/favicon.ico",
"type": "blogs",
"domain": "wik.io",
"id": "2388575404943858468"
},
{
"title": "Apple to halt sales of iPhone 4S in China (Fame Dubai Blog)",
"description": "SHANGHAI – Apple Inc said on Friday it will stop selling its latest iPhone in its retail stores in Beijing and Shanghai to ensure the safety of its customers and employees. Go to SourceSource : Fame Dubai BlogExplore : iPhone, iPhone 4, Phone",
"link": "http://wik.io/info/US/309198933",
"timestamp": 1326439320,
"image": null,
"embed": null,
"language": null,
"user": null,
"user_image": null,
"user_link": null,
"user_id": null,
"geo": null,
"source": "wikio",
"favicon": "http://wikio.com/favicon.ico",
"type": "blogs",
"domain": "wik.io",
"id": "16209851193593872066"
}
]
}
//var objJson = JSON.parse(json3.items);
DownloadJSON2CSV(json3.items);
function DownloadJSON2CSV(objArray) {
var array = typeof objArray != 'object' ? JSON.parse(objArray) : objArray;
var str = '';
for (var i = 0; i < array.length; i++) {
var line = '';
for (var index in array[i]) {
line += array[i][index] + ',';
}
line.slice(0, line.Length - 1);
str += line + '\r\n';
}
$('div').html(str);
}
</script>
</head>
<body>
<div></div>
</body>
</html>
Pero no parece funcionar. ¿Puede ayudarme alguien, por favor?
javascript
json
csv
praneybehl
fuente
fuente
2,Apple iPhone 4S Sale Cancelled in Beijing Amid Chaos (Design You Trust), ...
?Respuestas:
Una forma más elegante de convertir json a csv es usar la función map sin ningún marco:
Salida:
Actualización ES6 (2016)
Use esta sintaxis menos densa y también JSON.stringify para agregar comillas a las cadenas mientras mantiene los números sin comillas:
fuente
null
: ahora los ejemplos deben manejar correctamente tanto nulo como no definido y números.\"
que permite que algunos campos "salgan" de su columna cuando se ven en Excel (que parece preferir""
como carácter de escape para las comillas). Esto se puede resolver agregando.replace(/\\"/g, '""')
al final deJSON.stringify(row[fieldName], replacer)
como señalé en mi respuesta anterior.Ok, finalmente conseguí que este código funcionara:
Muchas gracias por todo el apoyo a todos los colaboradores.
Praney
fuente
Muy buena solución de praneybehl, pero si alguien quiere guardar los datos como un
csv
archivo y usar unblob
método, puede consultar esto:fuente
var row
dos veces (si las declaraciones y los bucles for no crean cierres). Además, el ciclo de etiqueta / encabezado probablemente podría reducirse a una línea:Object.keys(arrData[0]).join(',')
document.getElementById("lnkDwnldLnk").download = filename;
document.getElementById("lnkDwnldLnk").href = csvUrl;
2. trabajar en IE11:if (window.navigator && window.navigator.msSaveOrOpenBlob) {
window.navigator.msSaveOrOpenBlob(blob, filename);
} else {
document.getElementById('lnkDwnldLnk').click();
}
Solo quería agregar un código aquí para las personas en el futuro, ya que estaba tratando de exportar JSON a un documento CSV y descargarlo.
Utilizo
$.getJSON
para extraer datos json de una página externa, pero si tiene una matriz básica, puede usarla.Esto usa el código de Christian Landgren para crear los datos csv.
Editar: Vale la pena señalar que
JSON.stringify
se escaparán las comillas entre comillas al agregar\"
. Si ve el CSV en Excel, no le gusta que sea un carácter de escape.Puede agregar
.replace(/\\"/g, '""')
al final deJSON.stringify(row[fieldName], replacer)
para mostrar esto correctamente en Excel (esto reemplazará\"
con""
cuál es lo que Excel prefiere).Línea completa:
let csv = items.map(row => header.map(fieldName => (JSON.stringify(row[fieldName], replacer).replace(/\\"/g, '""'))).join(','));
fuente
Si alguien quería descargarlo también.
Aquí hay una pequeña función increíble que convertirá una matriz de objetos JSON a csv y luego la descargará.
Entonces llámalo así:
fuente
Cap D'antibes
Hay varias opciones disponibles para reutilizar las potentes bibliotecas existentes que se basan en estándares.
Si utiliza D3 en su proyecto, simplemente puede invocar:
d3.csv.format
od3.csv.formatRows
funciones para convertir una matriz de objetos en una cadena csv.d3.csv.formatRows
le brinda un mayor control sobre qué propiedades se convierten a csv.Consulte las páginas wiki d3.csv.format y d3.csv.formatRows .
También hay otras bibliotecas disponibles como jquery-csv , PapaParse . Papa Parse no tiene dependencias, ni siquiera jQuery.
Para complementos basados en jquery, marque esto .
fuente
Prueba estos ejemplos
Ejemplo 1:
Ejemplo 2:
Incluso puede descargar el archivo csv usando el siguiente código:
fuente
fuente
Esta es una forma de hacerlo para objetos dinámicamente profundos de una manera orientada a objetos para las versiones más nuevas de js. es posible que deba cambiar el seperatortipo tras la región.
fuente
A veces, los objetos tienen diferentes longitudes. Así que me encontré con el mismo problema que Kyle Pennell. Pero en lugar de ordenar la matriz, simplemente la recorremos y elegimos la más larga. La complejidad del tiempo se reduce a O (n), en comparación con O (n log (n)) cuando se clasifica primero.
Comencé con el código de la versión actualizada ES6 (2016) de Christian Landgren .
fuente
Quería burlarse de la respuesta de @Christian Landgren anterior. Estaba confundido por qué mi archivo CSV solo tenía 3 columnas / encabezados. Esto se debió a que el primer elemento en mi json solo tenía 3 claves. Así que debes tener cuidado con la
const header = Object.keys(json[0])
línea. Se supone que el primer elemento de la matriz es representativo. Tenía JSON desordenado con algunos objetos que tienen más o menos.Así que agregué
array.sort
a esto que ordenará el JSON por número de claves. De esa manera, su archivo CSV tendrá el número máximo de columnas.Esta también es una función que puede usar en su código. ¡Solo alimentalo con JSON!
fuente
Una adaptación de la respuesta de praneybehl para trabajar con objetos anidados y separador de pestañas
fuente
Escriba Csv.
fuente
Es curioso que no haya nada completo ni que funcione aquí (IE ni node.js). Responda a una pregunta similar, un JSON un poco estructurado (suponga que no es necesario copiarlo nuevamente), también se incluye un fragmento de demostración. Conversión de JSON a CSV (JavaScript): Cómo formatear correctamente la conversión de CSV Espero que no solo el convertidor de tipo único, también en mi Github (mencionado en el perfil) sea similar al utilizado para analizar la estructura JSON desconocida. Soy autor del código en esta respuesta y de todo el código en mi Github (excepto algunos proyectos que comenzaron como fork / + translation).
fuente
Personalmente , usaría la biblioteca d3-dsv para hacer esto. ¿Por qué hacerlo
reinvent the wheel
?Con la agitación de árboles, puede importar esa función particular de la
d3-dsv
bibliotecafuente
Aquí está mi versión simple de convertir una matriz de objetos en CSV (asumiendo que todos esos objetos comparten los mismos atributos):
fuente