我有一个在浏览器中打开json数据的链接,但不幸的是,我不知道如何读取它。有没有一种方法可以使用javascript将这些数据转换为csv格式并保存在javascript文件中?
数据如下所示:
{
"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"
}]
}
我能找到的最接近的格式是:将ms excel的json格式转换为csv格式
但它下载在一个csv文件中,我将它存储在一个变量中,整个转换数据。
还想知道如何更改转义字符: '\u2019'
恢复正常。
我尝试了以下代码:
<!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>
但它似乎不起作用。有人能帮忙吗?
18条答案
按热度按时间d8tt03nd1#
这里有一种方法可以用面向对象的方式为较新的js版本的动态深层对象实现这一点。您可能必须在区域之后更改SeparatorType。
pgccezyw2#
一个简单的函数,用于将嵌套的js对象(不带数组)以内联格式转换为csv格式。。
epggiuax3#
下面是使用优化良好的csv插件的最新答案:(这里的代码可能无法在stackoverflow上工作,但可以在您的项目中工作,因为我自己已经测试过了)
使用jquery和jquery.csv库(非常好地优化并完美地转义所有内容)https://github.com/typeiii/jquery-csv
mutmk8jj4#
我个人会使用D3DSV库来做这件事。为什么
reinvent the wheel
?通过树震动,您只需从
d3-dsv
图书馆pexxcrt25#
有趣的是,这里没有完成或工作(即node.js)。回答类似的问题,一个有点结构化的json(假设不需要再次复制),也包括演示片段。json-to-csv转换(javascript):如何正确格式化csv转换,希望不仅仅是单一类型的转换器,还有我的github(在概要文件中提到)上的转换,类似于分析未知的json结构。我是这个答案中的代码以及github上所有代码的作者(除了一些以fork/+translation开始的项目)。
tzcvj98z6#
写csv。
k0pti3hp7#
下面是我将对象数组转换为csv的简单版本(假设这些对象共享相同的属性):
6mw9ycah8#
我想把上面克里斯蒂安·兰德格伦的答案一笔勾销。我很困惑为什么我的csv文件只有3列/标题。这是因为json中的第一个元素只有3个键。所以,你需要小心使用
const header = Object.keys(json[0])
线路。假设数组中的第一个元素具有代表性。我有一个凌乱的json,有些对象或多或少都有。所以我加了一个
array.sort
它将按键的数量对json进行排序。这样,您的csv文件将具有最大列数。这也是一个可以在代码中使用的函数。喂它!
kx1ctssn9#
有时对象有不同的长度。所以我遇到了和kyle pennell一样的问题。但是我们不是对数组进行排序,而是简单地遍历它并选择最长的数组。与第一次排序时的o(n log(n))相比,时间复杂度降低到o(n)。
我从christian landgren更新的es6(2016)版本的代码开始。
svujldwt10#
从praneybehlanswer到使用嵌套对象和制表符分隔符的自适应
kmynzznz11#
s8vozzvw12#
试试这些例子
例1:
例2:
您甚至可以使用以下代码下载csv文件:
7xzttuei13#
有多个选项可用于重用基于标准的现有强大库。
如果您碰巧在项目中使用d3,那么您只需调用:
d3.csv.format
或d3.csv.formatRows
函数将对象数组转换为csv字符串。d3.csv.formatRows
使您能够更好地控制将哪些属性转换为csv。请参阅d3.csv.format和d3.csv.formatrows wiki页面。
还有其他可用的库,比如jquerycsv、papaparse。papa解析没有依赖项,甚至连jquery都没有。
对于基于jquery的插件,请检查此项。
xkrw2x1b14#
如果有人想下载的话。
下面是一个很棒的小函数,它将json对象数组转换为csv,然后下载。
那么就这样称呼它:
3ks5zfa015#
我只是想在这里为将来的人们添加一些代码,因为我试图将json导出到csv文档并下载它。
我用
$.getJSON
从外部页面提取json数据,但如果您有一个基本数组,就可以使用它。这使用christian landgren的代码创建csv数据。
编辑:值得注意的是
JSON.stringify
将通过添加\"
. 如果在excel中查看csv,它不喜欢将其作为转义字符。你可以加上
.replace(/\\"/g, '""')
到底JSON.stringify(row[fieldName], replacer)
要在excel中正确显示此信息(这将替换\"
具有""
这是excel更喜欢的)。全行:
let csv = items.map(row => header.map(fieldName => (JSON.stringify(row[fieldName], replacer).replace(/\\"/g, '""'))).join(','));