2

私はこのGoogleスプレッドシートスクリプトを使用して、json形式の書籍データを取得します。書籍のタイトルと著者を表示するのに問題はありませんが、 "offerData"オブジェクトには書籍によって異なる量の要素(売り手からの価格)を含めることができます。今、私は、ループを作成し、そのようなofferData値格納しています:ループ(Googleスプレッドシート)を使用して入れ子になったjson値を返します

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人程度のどこでもかまいません。

私の質問は、ここでどのようにすべてのオファーデータ(価格/条件/売り手)を返すことができますか? :

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; 

    } 
} 

答えて

0

答え、あなたはそれについて考えるべきか

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

ありがとうRobert!これを行う方法です:)私はforループで1つのエラーに気付きました。私はi = 1 + 3をi = i + 3に変更しました。 – dean2020

+0

@ dean2020このミスについて申し訳ありません、それは私とたくさんのことが起こります – robert

0

あなたはこのようなものを探しているかもしれません。

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