Estou procurando soluções para converter JSON em CSV. Parece que a maioria das soluções espera que o JSON seja um único objeto em vez de uma matriz de objetos.
Todas as soluções que tentei daqui parecem quebrar com minha entrada, que vem da ondulação deste site .
Como posso converter o JSON em um CSV com jq
ou outra ferramenta quando a entrada é uma matriz em vez de um objeto.
[
{
"id": "4",
"link": "https://pressbooks.online.ucf.edu/amnatgov/",
"metadata": {
"@context": "http://schema.org",
"@type": "Book",
"name": "American Government",
"inLanguage": "en",
"copyrightYear": "2016",
"disambiguatingDescription": "The content of this textbook has been developed and arranged to provide a logical progression from the fundamental principles of institutional design at the founding, to avenues of political participation, to thorough coverage of the political structures that constitute American government. The book builds upon what students have already learned and emphasizes connections between topics as well as between theory and applications. The goal of each section is to enable students not just to recognize concepts, but to work with them in ways that will be useful in later courses, future careers, and as engaged citizens. ",
"image": "https://pressbooks.online.ucf.edu/app/uploads/sites/4/2020/01/American-Government.png",
"isBasedOn": "https://ucf-dev.pb.unizin.org/pos2041",
"author": [
{
"@type": "Person",
"name": "OpenStax"
}
],
"datePublished": "2016-01-06",
"copyrightHolder": {
"@type": "Organization",
"name": "cnxamgov"
},
"license": {
"@type": "CreativeWork",
"url": "https://creativecommons.org/licenses/by/4.0/",
"name": "CC BY (Attribution)"
}
},
"_links": {
"api": [
{
"href": "https://pressbooks.online.ucf.edu/amnatgov/wp-json/"
}
],
"metadata": [
{
"href": "https://pressbooks.online.ucf.edu/amnatgov/wp-json/pressbooks/v2/metadata"
}
],
"self": [
{
"href": "https://pressbooks.online.ucf.edu/wp-json/pressbooks/v2/books/4"
}
]
}
}
]
Formato Desejado:
id, link, context, type, name, inLanguage, image, author_type, author_name, license_type, license_url, license_name
A questão não é realmente que o JSON que você mostra seja um array, mas que cada elemento do array (do qual você tem apenas um) é uma estrutura bastante complexa. É simples extrair os dados relevantes de cada entrada da matriz em uma matriz plana mais curta e convertê-la em CSV com
@csv
injq
:... mas observe como sou forçado a decidir que estamos interessados apenas no primeiro autor (a
.metadata.author
subestrutura é uma matriz).A saída:
Para criar strings de nome de autor que são concatenações de todos os nomes de autor (e similarmente para tipos de autor), com
;
como delimitador, você pode.metadata.author[0].name
usar em vez do acima[.metadata.author[].name]|join(";")
(e[.metadata.author[]."@type"]|join(";")
para o tipo), para que seu comando se torneUsando Miller ( https://github.com/johnkerl/miller ) você pode "flat" o JSON, executando
e, em seguida, extraia os campos desejados e renomeie-os usando
A saída será