使用循环返回嵌套的 json 值(google 电子表格)

returning nested json values using loop (google spreadsheet)

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

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

并且正在 return 处理这样的数据:

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

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

我的问题是我如何 return 所有 offerData (price/condition/seller) 在这里? :

 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;

  }
 }

答案

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]
  ]
];

您可能正在寻找这样的东西;

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);
                               });