首页 > 解决方案 > 解析和连接多个json文件

问题描述

我有几百个 json 文件要解析(700-800)。它们都遵循相同的表示,因此它们可以很容易地垂直连接(第二个在第一个下面,等等......)成一个大的单个对象数组。在现实生活中,该数组的长度将达到 2-3 百万。

我目前正在做的事情显示在附加的代码片段中。请问这样有效率吗,有没有更好的方法(希望更快)?

在我的带有英特尔 i7-8809G 处理器和 Windows 10 的机器上,此代码片段在 2.8 秒内运行

<!DOCTYPE html>
<html>
<head>
    <!--d3 -->
    <script src='https://d3js.org/d3.v4.min.js'></script>
</head>
<body>

<script>

    var start = (new Date()).getTime();
    var elapsed;
    function my_loader(size) {
        urls = d3.range(size).map(function (d) {
            return make_url(d)
        });
        var q = d3.queue();
        for (var i = 0; i < urls.length; i++) {
            q = q.defer(d3.json, urls[i]);
        }
        q.await(onDataLoad('some value'));
    }

    
    function make_url(i) {
        // This is just an example json. In real life I would have something like:
        // url = "data/json/file_" + i + ".json" 
        url = "https://data.nasa.gov/resource/y77d-th95.json";
        return url
    }


    function onDataLoad(param) {
        // do something with the param here if needed. Here it is not used
        var data = [];
        return (err, ...args) => {
            //concatenate them all
            args.forEach(d => {
                data = [...data, ...d]
            });
            console.log('data loaded: ' + data.length);
            elapsed = (new Date()).getTime() - start;
            console.log('Elapsed time: ' + elapsed/1000 + ' secs');
        }
    }


    num_of_jsons = 500;
    my_loader(num_of_jsons);

</script>

</body>
</html>

标签: javascriptjqueryd3.js

解决方案


推荐阅读