【问题标题】:returning nested json values using loop (google spreadsheet)使用循环返回嵌套的 json 值(谷歌电子表格)
【发布时间】:2016-04-13 09:14:24
【问题描述】:

我有这个谷歌电子表格脚本,它可以提取 json 格式的图书数据。显示书名和作者没有问题,但他的“offerData”对象可以包含不同数量的元素(来自卖家的价格),具体取决于书。现在我创建了一个循环并像这样存储 offerData 值:

   price[i] = offerdata.offers[i]["price"];
   condition[i] = offerdata.offers[i]["condition"];
   seller[i] = offerdata.offers[i]["seller"]["displayName"];

并返回如下数据:

 var resultRow = [[title, specstag, price[0], condition[0], seller[0], price[1], condition[1], seller[1], price[2], condition[2], seller[2]]];

显然这只会返回 3 个卖家,包括价格、状况、卖家信息。问题是一本书并不总是有 3 个卖家,它可以是 1 到 10 个左右。

我的问题是如何在此处返回所有 offerData(价格/条件/卖家)? :

 var resultRow = [[title, specstag, price[0], condition[0], seller[0], price[1], condition[1], seller[1], price[2], condition[2], seller[2]]];

--

function getBookDetails(isbn) {

// Query the book database by ISBN code.

if (isbn !== "") { 

var url = "https://api.bol.com/catalog/v4/search/?apikey=myapi6&offers=all&format=json&q=" + isbn;

var response = UrlFetchApp.fetch(url);
var results = JSON.parse(response);


if (results.totalResultSize) {

// There'll be only 1 book per ISBN
var book = results.products[0];

// get Title and Authors
var title = (results.products[0]["title"]);
var specstag = (results.products[0]["specsTag"]);

var offerdata = results.products[0]["offerData"];

if (typeof offerdata.offers !== 'undefined' && offerdata.offers.length > 0) {
var arrayLength = offerdata.offers.length;
var price = [];
var condition = [];
var seller = [];

for (var i = 0; i < arrayLength; i++) {

  price[i] = offerdata.offers[i]["price"];
  condition[i] = offerdata.offers[i]["condition"];
  seller[i] = offerdata.offers[i]["seller"]["displayName"];

  }
 }    
}

var resultRow = [[title, specstag, price[0], condition[0], seller[0], price[1], condition[1], seller[1], price[2], condition[2], seller[2]]];


return resultRow;

  }
 }

【问题讨论】:

    标签: javascript arrays json google-sheets javascript-objects


    【解决方案1】:

    答案

    var resultRow = [];
    resultRow[0] = [];
    resultRow[0][0]=title;
    resultRow[0][1]=specstag;
    for (var i = 0; i < arrayLength; i=1+3) {
      resultRow[0][3*i+2]=price[i];
      resultRow[0][3*i+3]=condition[i];
      resultRow[0][3*i+4]=seller[i];
    }
    

    你应该怎么想它是查看数组中元素的索引,然后找到 i 和你想要的索引之间的关系

    var resultRow = [
      [
        title, //[0][0]
        specstag, //[0][1]
        price[0], //[0][2]
        condition[0], //[0][3]
        seller[0], //[0][4]
        price[1], //[0][5]
        condition[1], //[0][6]
        seller[1], //[0][7]
        price[2], //[0][8]
        condition[2], //[0][9]
        seller[2]//[0][10]
      ]
    ];
    

    【讨论】:

    • 谢谢罗伯特!这是一种方法 :) 我确实注意到 for 循环中有一个错误,我将 i=1+3 更改为 i=i+3,它起作用了!
    • @dean2020 很抱歉这个错误,我经常发生这种错误,如果正确,请您接受答案
    【解决方案2】:

    您可能正在寻找类似的东西;

    var data = {     title: null,
                   spcstag: null,
                       pcs: [],
               };
    
    offerData.offers.forEach( p => { var pcsData = {};
                                     !!data.title || data.title = p.title;
                                     !!data.specstag || data.specstag = p.specstag;
                                     pcsData.price = p.price;
                                     pcsData.condition = p.condition;
                                     pcsData.seller = p.seller;
                                     data.pcs.push(pcsData);
                                   });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多