-4

我看过一些将 json 转换为 csv 的帖子,例如“ http://jsfiddle.net/FLR4v/ ”。我无法让他们将此 json 转换为 csv 。

这是我的代码(这很好用,但不适用于下面注释掉的 var json3)

 <html>
    <head>
    <title>JSON to CSV</title>
    <script src="json.js" type="text/javascript"></script>
    <script type="text/javascript">

    //var json3 = { "inp1:val1": { "data": [ [ 1378267200000, 0.0743 ], [ 1378270800000, 0.1787 ] ] }}
    var json3 = { "data": [ [ 1378267200000, 0.0743 ], [ 1378270800000, 0.1787 ], ] }
    DownloadJSON2CSV(json3.data);

    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] + ',';
            }

            // Here is an example where you would wrap the values in double quotes
            // for (var index in array[i]) {
            //    line += '"' + array[i][index] + '",';
            // }

            line.slice(0,line.Length-1); 

            str += line + '\r\n';
        }
        window.open( "data:text/csv;charset=utf-8," + escape(str))
    }

    </script>

   </head>
   <body>
    <h1>This page does nothing....</h1>
</body>
</html>

上面的代码工作正常。我需要的是上面需要与下面一起工作

var json3 = { "inp1:val1": { "data": [ [ 1378267200000, 0.0743 ], [ 1378270800000, 0.1787 ] ] }}

谢谢你的帮助

4

1 回答 1

0

您仍然没有清楚地解释您想要的输出是什么(“CSV”太模糊了,尤其是当您原来的 jsfiddle 产生分号分隔的输出时)。

但是您似乎确实在说,如果您采用此对象,您的代码就可以工作:

    var json3 = { "data": [ [ 1378267200000, 0.0743 ], [ 1378270800000, 0.1787 ], ] }

...作为您的函数的输入,如下所示:

DownloadJSON2CSV(json3.data);

但是现在你想处理一个结构略有不同的输入对象,本质上是相同的,但在你的原始结构周围有一个额外的“包装”层:

var json3 = { "inp1:val1": { "data": [ [ 1378267200000, 0.0743 ], [ 1378270800000, 0.1787 ] ] }}

如果我准确地总结了您的问题,这就是您需要的:

DownloadJSON2CSV(json3["inp1:val1"].data);

这将调用您的函数,传递由最外层对象的“inp1:val1”属性引用的对象的“data”属性引用的数组数组。

(请注意,您所说的“json”根本不是 json,它是一个碰巧使用 JS 的对象文字语法创建的对象。)

你的作业:阅读 MDN 文章Working With Objects

于 2013-09-15T00:56:29.270 回答