首页 > 解决方案 > 如何读取 javascript 数组并将其重新格式化为 JSON 对象?

问题描述

根据我给定的参数,我正在从 Google Analytics API 获取以下数据。这是一个 JavaScript 数组对象。

[ [ '201801', '(Other)', '129' ],
  [ '201801', 'Direct', '2236' ],
  [ '201801', 'Email', '2' ],
  [ '201801', 'Organic Search', '6263' ],
  [ '201801', 'Referral', '185' ],
  [ '201801', 'Social', '669' ],
  [ '201802', '(Other)', '371' ],
  [ '201802', 'Direct', '2037' ],
  [ '201802', 'Email', '3' ],
  [ '201802', 'Organic Search', '5790' ],
  [ '201802', 'Referral', '162' ],
  [ '201802', 'Social', '515' ],
  [ '201803', '(Other)', '213' ],
  [ '201803', 'Direct', '2465' ],
  [ '201803', 'Organic Search', '8596' ],
  [ '201803', 'Referral', '238' ],
  [ '201803', 'Social', '356' ],
  [ '201804', '(Other)', '65' ],
  [ '201804', 'Direct', '1872' ],
  [ '201804', 'Email', '1' ],
  [ '201804', 'Organic Search', '9275' ],
  [ '201804', 'Referral', '170' ],
  [ '201804', 'Social', '307' ],
  [ '201805', '(Other)', '35' ],
  [ '201805', 'Direct', '2429' ],
  [ '201805', 'Email', '2' ],
  [ '201805', 'Organic Search', '8995' ],
  [ '201805', 'Referral', '234' ],
  [ '201805', 'Social', '341' ],
  [ '201806', 'Direct', '51' ],
  [ '201806', 'Organic Search', '282' ],
  [ '201806', 'Referral', '1' ],
[ '201806', 'Social', '3' ] ]

如果根本不清楚,请检查此 GIST:https ://gist.github.com/chanakaDe/3ad4e2a51c99386a2737b65a82f034b1

在这个数组中,你可以看到像这样的 '201801'。这意味着 YEAR 是 2018 年,MONTH 是 1 日。它同样继续。

通常在某一特定月份,我们会得到 6 个值,例如 (Other) 、 Direct 、 Email 、 Organic Search 。推荐和社交。在这个数组中,同一日期重复 6 次。

我想做的是从中创建一个简单的 JSON 对象。这是我想要创建的格式,以便在我的 AngularJS 前端显示所有这些数据。

[
    {
        "date" : "201801",
        "(Other)" : "129",
        "Direct" : "2236",
        "Email" : "2",
        "OrganicSearch" : "6263",
        "Referral" : "185",
        "Social" : "669"
    },
    {
        "date" : "201802",
        "(Other)" : "371",
        "Direct" : "2037",
        "Email" : "3",
        "OrganicSearch" : "5790",
        "Referral" : "162",
        "Social" : "515"
    }
]

我想要一个这样的 JSON 数组。我试图找到重复的值,然后尝试将它们合并到一个 JSON 对象中(如果附近的元素相同)。很多这样的尝试。但是还是不行。请各位,此刻真的很想得到你们的帮助。我不擅长数据分析和这类排序。请帮帮我。这个项目是使用 Node.js 8.10.0 完成的。

标签: javascriptarraysjsonnode.jsgoogle-analytics

解决方案


您可以将日期作为哈希表的键并收集所有键值对。稍后仅获取对象数组的值。

var array = [['201801', '(Other)', '129'], ['201801', 'Direct', '2236'], ['201801', 'Email', '2'], ['201801', 'Organic Search', '6263'], ['201801', 'Referral', '185'], ['201801', 'Social', '669'], ['201802', '(Other)', '371'], ['201802', 'Direct', '2037'], ['201802', 'Email', '3'], ['201802', 'Organic Search', '5790'], ['201802', 'Referral', '162'], ['201802', 'Social', '515'], ['201803', '(Other)', '213'], ['201803', 'Direct', '2465'], ['201803', 'Organic Search', '8596'], ['201803', 'Referral', '238'], ['201803', 'Social', '356'], ['201804', '(Other)', '65'], ['201804', 'Direct', '1872'], ['201804', 'Email', '1'], ['201804', 'Organic Search', '9275'], ['201804', 'Referral', '170'], ['201804', 'Social', '307'], ['201805', '(Other)', '35'], ['201805', 'Direct', '2429'], ['201805', 'Email', '2'], ['201805', 'Organic Search', '8995'], ['201805', 'Referral', '234'], ['201805', 'Social', '341'], ['201806', 'Direct', '51'], ['201806', 'Organic Search', '282'], ['201806', 'Referral', '1'], ['201806', 'Social', '3']],
    result = Object.values(
        array.reduce((r, [date, key, value]) => {
            r[date] = r[date] || { date };
            r[date][key] = value;
            return r;
        }, {})
    );

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }


推荐阅读