J'ai un lien qui ouvre les données JSON dans le navigateur, mais malheureusement je n'ai aucune idée de comment le lire. Existe-t-il un moyen de convertir ces données à l'aide de JavaScript au format CSV et de les enregistrer dans un fichier JavaScript?
Les données ressemblent à:
{
"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"
}]
}
Le plus proche que j'ai pu trouver était: Convertir le format JSON au format CSV pour MS Excel
Mais il télécharge dans un fichier CSV, je le stocke dans une variable, l'ensemble des données converties.
J'aimerais également savoir comment changer les caractères d'échappement: '\u2019'
retour à la normale.
J'ai essayé ce code:
<!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>
Mais cela ne semble pas fonctionner. Puis-je avoir une aide s'il vous plait?
javascript
json
csv
Praneybehl
la source
la source
2,Apple iPhone 4S Sale Cancelled in Beijing Amid Chaos (Design You Trust), ...
?Réponses:
Un moyen plus élégant de convertir json en csv est d'utiliser la fonction map sans aucun framework:
Production:
Mise à jour ES6 (2016)
Utilisez cette syntaxe moins dense ainsi que JSON.stringify pour ajouter des guillemets aux chaînes tout en gardant les nombres sans guillemets:
la source
null
- maintenant, les exemples doivent gérer à la fois les valeurs nulles, non définies et les nombres correctement.\"
ce qui permet à certains champs de "sortir" de leur colonne lorsqu'ils sont affichés dans Excel (ce qui semble préférer""
comme caractère d'échappement pour les guillemets). Cela peut être résolu en ajoutant.replace(/\\"/g, '""')
à la fin deJSON.stringify(row[fieldName], replacer)
comme je l'ai noté dans ma réponse ci-dessus.Ok, j'ai enfin fait fonctionner ce code:
Merci beaucoup pour tout le soutien à tous les contributeurs.
Praney
la source
Très belle solution de praneybehl, mais si quelqu'un veut enregistrer les données sous forme de
csv
fichier et en utilisant uneblob
méthode, il peut se référer à ceci:la source
var row
deux fois (si les instructions et les boucles for ne créent pas de fermetures). De plus, la boucle d'étiquette / d'en-tête pourrait probablement être réduite à une ligne:Object.keys(arrData[0]).join(',')
document.getElementById("lnkDwnldLnk").download = filename;
document.getElementById("lnkDwnldLnk").href = csvUrl;
2. travailler dans IE11:if (window.navigator && window.navigator.msSaveOrOpenBlob) {
window.navigator.msSaveOrOpenBlob(blob, filename);
} else {
document.getElementById('lnkDwnldLnk').click();
}
Je voulais juste ajouter du code ici pour les gens à l'avenir, car j'essayais d'exporter JSON vers un document CSV et de le télécharger.
J'utilise
$.getJSON
pour extraire des données json d'une page externe, mais si vous avez un tableau de base, vous pouvez simplement l'utiliser.Cela utilise le code de Christian Landgren pour créer les données csv.
Edit: Il convient de noter que
JSON.stringify
les guillemets échappent aux guillemets en ajoutant\"
. Si vous affichez le CSV dans Excel, il n'aime pas cela comme un caractère d'échappement.Vous pouvez ajouter
.replace(/\\"/g, '""')
à la fin deJSON.stringify(row[fieldName], replacer)
pour l'afficher correctement dans Excel (cela remplacera\"
par""
quel est ce que Excel préfère).Ligne complète:
let csv = items.map(row => header.map(fieldName => (JSON.stringify(row[fieldName], replacer).replace(/\\"/g, '""'))).join(','));
la source
Si quelqu'un voulait aussi le télécharger.
Voici une petite fonction géniale qui convertira un tableau d'objets JSON en csv, puis le téléchargera.
Alors appelez-le comme ceci:
la source
Cap D'antibes
Plusieurs options sont disponibles pour réutiliser les puissantes bibliothèques existantes basées sur des normes.
Si vous utilisez D3 dans votre projet, vous pouvez simplement appeler:
d3.csv.format
ou desd3.csv.formatRows
fonctions pour convertir un tableau d'objets en chaîne csv.d3.csv.formatRows
vous donne un meilleur contrôle sur les propriétés converties en csv.Veuillez vous référer aux pages wiki d3.csv.format et d3.csv.formatRows .
Il existe également d'autres bibliothèques disponibles comme jquery-csv , PapaParse . Papa Parse n'a pas de dépendances - pas même jQuery.
Pour les plugins basés sur jquery, veuillez vérifier ceci .
la source
Essayez ces exemples
Exemple 1:
Exemple2:
Vous pouvez même télécharger le fichier csv en utilisant le code suivant:
la source
la source
Voici un moyen de le faire pour les objets dynamiquement profonds d'une manière orientée objet pour les versions plus récentes de js. vous devrez peut-être changer le type de séparateur après la région.
la source
Parfois, les objets ont des longueurs différentes. J'ai donc rencontré le même problème que Kyle Pennell. Mais au lieu de trier le tableau, nous le parcourons simplement et choisissons le plus long. La complexité temporelle est réduite à O (n), par rapport à O (n log (n)) lors du tri en premier.
J'ai commencé avec le code de la version mise à jour ES6 (2016) de Christian Landgren .
la source
Je voulais riffer la réponse de @Christian Landgren ci-dessus. J'étais confus pourquoi mon fichier CSV n'avait que 3 colonnes / en-têtes. C'était parce que le premier élément de mon json n'avait que 3 clés. Vous devez donc faire attention à la
const header = Object.keys(json[0])
ligne. Il suppose que le premier élément du tableau est représentatif. J'avais JSON désordonné avec certains objets ayant plus ou moins.J'ai donc ajouté un
array.sort
à cela qui ordonnera le JSON par nombre de clés. Ainsi, votre fichier CSV aura le nombre maximum de colonnes.C'est également une fonction que vous pouvez utiliser dans votre code. Nourrissez-le simplement JSON!
la source
Une adaptation de praneybehl answer pour travailler avec des objets imbriqués et un séparateur de tabulation
la source
Écrivez Csv.
la source
Drôle rien de complet ni de travail ici (IE ni node.js). Réponse à une question similaire, un JSON un peu structuré (supposons qu'il ne soit pas nécessaire de le copier à nouveau), également un extrait de démonstration inclus. Conversion JSON en CSV (JavaScript): Comment formater correctement la conversion CSV Espérons que non seulement un convertisseur de type unique, également sur mon Github (mentionné dans le profil) est similaire utilisé pour analyser la structure JSON inconnue. Je suis l'auteur du code dans cette réponse et de tout le code sur mon Github (sauf certains projets démarrés en tant que fork / + translation).
la source
Personnellement, j'utiliserais la bibliothèque d3-dsv pour ce faire. Pourquoi
reinvent the wheel
?Avec l' arborescence, vous pouvez simplement importer cette fonction particulière de la
d3-dsv
bibliothèquela source
Voici ma version simple de la conversion d'un tableau d'objets en CSV (en supposant que ces objets partagent tous les mêmes attributs):
la source