Tenho um link que abre dados JSON no navegador, mas infelizmente não tenho ideia de como lê-lo. Existe uma maneira de converter esses dados usando JavaScript no formato CSV e salvá-los no arquivo JavaScript?
Os dados se parecem com:
{
"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"
}]
}
O mais próximo que consegui encontrar foi: Converter o formato JSON para o formato CSV para MS Excel
Mas ele baixa em um arquivo CSV, eu armazeno em uma variável, todos os dados convertidos.
Também gostaria de saber como alterar os caracteres de escape: de '\u2019'
volta ao normal.
Tentei 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>
Mas não parece funcionar. Alguém pode ajudar por favor?
javascript
json
csv
praneybehl
fonte
fonte
2,Apple iPhone 4S Sale Cancelled in Beijing Amid Chaos (Design You Trust), ...
?Respostas:
Uma maneira mais elegante de converter json em csv é usar a função map sem qualquer estrutura:
Resultado:
Atualizar ES6 (2016)
Use esta sintaxe menos densa e também JSON.stringify para adicionar aspas a strings, mantendo os números sem aspas:
fonte
null
- agora os exemplos devem lidar com nulos, indefinidos e números corretamente.\"
que permite que alguns campos "saltem" de suas colunas quando visualizados no Excel (o que parece preferir""
como um caractere de escape para aspas). Isso pode ser resolvido adicionando.replace(/\\"/g, '""')
ao final de,JSON.stringify(row[fieldName], replacer)
conforme observei na minha resposta acima.Ok, finalmente fiz este código funcionar:
Muito obrigado por todo o apoio a todos os contribuidores.
Praney
fonte
Muito boa solução por praneybehl, mas se alguém quiser salvar os dados como um
csv
arquivo e usando umblob
método, eles podem se referir a isto:fonte
var row
duas vezes (instruções if e loops for não criam fechamentos). Além disso, o loop de rótulo / cabeçalho provavelmente poderia ser reduzido a uma linha:Object.keys(arrData[0]).join(',')
document.getElementById("lnkDwnldLnk").download = filename;
document.getElementById("lnkDwnldLnk").href = csvUrl;
2. trabalhar no IE11:if (window.navigator && window.navigator.msSaveOrOpenBlob) {
window.navigator.msSaveOrOpenBlob(blob, filename);
} else {
document.getElementById('lnkDwnldLnk').click();
}
Eu só queria adicionar um código aqui para as pessoas no futuro, já que estava tentando exportar JSON para um documento CSV e baixá-lo.
eu uso
$.getJSON
para extrair dados json de uma página externa, mas se você tiver um array básico, você pode simplesmente usá-lo.Isso usa o código de Christian Landgren para criar os dados csv.
Editar: é importante notar que
JSON.stringify
irá escapar as aspas ao adicionar\"
. Se você visualizar o CSV no excel, ele não gosta disso como um caractere de escape.Você pode adicionar
.replace(/\\"/g, '""')
ao final deJSON.stringify(row[fieldName], replacer)
para exibi-lo corretamente no Excel (isso substituirá\"
por""
que é o que excel prefere).Linha completa:
let csv = items.map(row => header.map(fieldName => (JSON.stringify(row[fieldName], replacer).replace(/\\"/g, '""'))).join(','));
fonte
Se alguém quiser fazer o download também.
Aqui está uma pequena função incrível que converterá uma matriz de objetos JSON em csv e, em seguida, fará o download.
Em seguida, chame-o assim:
fonte
Cap D'antibes
Existem várias opções disponíveis para reutilizar as poderosas bibliotecas existentes que são baseadas em padrões.
Se acontecer de você usar D3 em seu projeto, você pode simplesmente invocar:
d3.csv.format
oud3.csv.formatRows
funções para converter um array de objetos em string csv.d3.csv.formatRows
oferece maior controle sobre quais propriedades são convertidas em csv.Por favor, consulte d3.csv.format e d3.csv.formatRows wiki páginas.
Existem outras bibliotecas disponíveis, como jquery-csv , PapaParse . Papa Parse não tem dependências - nem mesmo jQuery.
Para plug-ins baseados em jquery, verifique isto .
fonte
Experimente estes exemplos
Exemplo 1:
Exemplo 2:
Você pode até baixar o arquivo csv usando o seguinte código:
fonte
fonte
Aqui está uma maneira de fazer isso para objetos dinamicamente profundos de uma forma orientada a objetos para as versões mais recentes do js. você pode ter que alterar o tipo de separação após a região.
fonte
Às vezes, os objetos têm comprimentos diferentes. Então, tive o mesmo problema de Kyle Pennell. Mas, em vez de classificar o array, simplesmente o percorremos e escolhemos o mais longo. A complexidade do tempo é reduzida a O (n), em comparação com O (n log (n)) ao classificar primeiro.
Comecei com o código da versão ES6 (2016) atualizada de Christian Landgren .
fonte
Eu queria resumir a resposta de @Christian Landgren acima. Fiquei confuso por que meu arquivo CSV tinha apenas 3 colunas / cabeçalhos. Isso ocorreu porque o primeiro elemento em meu json tinha apenas 3 chaves. Então você precisa ter cuidado com o
const header = Object.keys(json[0])
linha. Ele está assumindo que o primeiro elemento da matriz é representativo. Eu tinha um JSON bagunçado que com alguns objetos tendo mais ou menos.Então, adicionei um
array.sort
a isso que ordenará o JSON por número de chaves. Assim, seu arquivo CSV terá o número máximo de colunas.Essa também é uma função que você pode usar em seu código. Basta alimentá-lo com JSON!
fonte
Uma adaptação da resposta praneybehl para trabalhar com objetos aninhados e separador de tabulação
fonte
Escreva Csv.
fonte
Engraçado nada completo nem funcionando aqui (IE nem node.js). Responda a uma pergunta semelhante, um JSON pouco estruturado (suponha que não haja necessidade de copiá-lo novamente), também inclui um trecho de demonstração. Conversão JSON para CSV (JavaScript): Como formatar corretamente a conversão CSV Espero que não apenas o conversor de tipo único, também no meu Github (mencionado no perfil) seja usado de forma semelhante para analisar a estrutura JSON desconhecida. Eu sou o autor do código nesta resposta e de todo o código no meu Github (exceto alguns projetos iniciados como tradução fork / +).
fonte
Pessoalmente, eu usaria a biblioteca d3-dsv para fazer isso. Por quê
reinvent the wheel
?Com o tremor de árvore, você pode simplesmente importar essa função específica da
d3-dsv
bibliotecafonte
Esta é minha versão simples de converter uma matriz de objetos em CSV (assumindo que todos os objetos compartilhem os mesmos atributos):
fonte