将Google工作表中的JSON数据放入数组

时间:2017-04-03 08:51:50

标签: javascript arrays json google-sheets

我的表格:https://docs.google.com/spreadsheets/d/1pruXYXrbITR7CoQXZG1I1kyS4DahYBXmGMDEK2T6MpY/edit?usp=sharing

我正在使用Google工作表将JSON数据显示在我的网站上,但我想将一些数据放入数组中,因此它不会在网站上重复出现。

例如,这就是它的显示方式,但我希望能够为每个组(zouk,zen等)设置一个标题,然后将所有成员放在一个标题下。 https://www.kentunion.co.uk/test1/

所以我试图找出一些将一个组的所有位置添加到数组中的javascript。从这里开始:

"Zouk Society" : {
      "name" : "Zouk Society",
      "position" : "President",
      "member" : "Currently Vacant"
    },
    "Zouk Society" : {
      "name" : "Zouk Society",
      "position" : "Secretary",
      "member" : "Currently Vacant"
    },
    "Zouk Society" : {
      "name" : "Zouk Society",
      "position" : "Treasurer",
      "member" : "Currently Vacant"
    }

到此:

"Zouk Society" [{
      "position" : "President",
      "member" : "Currently Vacant"
    },
    {
      "position" : "Secretary",
      "member" : "Currently Vacant"
    },
    {
      "position" : "Treasurer",
      "member" : "Currently Vacant"
    }
]

我尝试了以下JS,但我只是从中得到错误:

 // ID of the Google Spreadsheet
 var spreadsheetID = "1pruXYXrbITR7CoQXZG1I1kyS4DahYBXmGMDEK2T6MpY";

 // Make sure it is public or set to Anyone with link can view 
 var url = "https://spreadsheets.google.com/feeds/list/1pruXYXrbITR7CoQXZG1I1kyS4DahYBXmGMDEK2T6MpY/od6/public/values?alt=json";
     $(document).ready(function () {
         $.getJSON(url, function(data) {

             var entry = data.feed.entry;

             $(entry).each(function(){
                  // Column names are name, age, etc.
                  $('.results').prepend('<h2>'+this.gsx$name.$t+'</h2><p>'+this.gsx$position.$t+'</p><p>'+this.gsx$member.$t+'</p>');
             });
         });

    var grouped = {};

        entry.forEach(function (a) {
          grouped[a.name] = grouped[a.name] || [];
                grouped[a.name].push({ position: a.position, member: a.member });
        });
        document.write('<pre>' + JSON.stringify(grouped, 0, 4) + '</pre>');

  });

这是我得到的错误:

  

未捕获的ReferenceError:未定义条目   HTMLDocument的。 (scripts.js中:19)

2 个答案:

答案 0 :(得分:1)

您无法访问回调范围之外的条目。

在回调中进行分组,如下所示:

// ID of the Google Spreadsheet
var spreadsheetID = "1pruXYXrbITR7CoQXZG1I1kyS4DahYBXmGMDEK2T6MpY";

// Make sure it is public or set to Anyone with link can view
var url = "https://spreadsheets.google.com/feeds/list/1pruXYXrbITR7CoQXZG1I1kyS4DahYBXmGMDEK2T6MpY/od6/public/values?alt=json";

$(document).ready(function () {
    $.getJSON(url, function(data) {
        var entry = data.feed.entry;

        $(entry).each(function(){
            // Column names are name, age, etc.
            $('.results').prepend('<h2>'+this.gsx$name.$t+'</h2><p>'+this.gsx$position.$t+'</p><p>'+this.gsx$member.$t+'</p>');
        });

        var grouped = {};

        entry.forEach(function (a) {
            grouped[a.gsx$name.$t] = grouped[a.gsx$name.$t] || [];
            grouped[a.gsx$name.$t].push({ position: a.gsx$position.$t, member: a.gsx$member.$t });
        });

        document.write('<pre>' + JSON.stringify(grouped, 0, 4) + '</pre>');
    });
});

答案 1 :(得分:0)

您不能将<field name="emp_img" readonly="1" widget='image' class="oe_left oe_avatar" /> 数据转换为对象。您应该将push更改为var grouped = {}。然后,您可以将每个元素推送到此对象数组,并使用此语法var grouped = []访问它们。

我不明白你的特殊问题,但&#34;对象阵列&#34;是你问题的解决方案。