2016-11-04 3 views
0

Я новичок в кодировании в скриптах Google, и я пытаюсь понять, как перенести данные, которые я получаю из форматированного файла JSON в электронную таблицу.
Я пытаюсь извлечь финансовые данные, но если бы я смог обработать простой пример ниже, это помогло бы мне понять, как кодировать все другие форматы JSON, с которыми я сталкиваюсь.Разбор JSON Возвращенные данные в скриптах Google

Я знаю основы.
Я могу связать электронную таблицу, и я могу разобрать ее, используя две команды ниже.
Это шаг после этого, когда я подталкиваю данные к электронной таблице, с которой я испытываю трудности.

var responseAPI = UrlFetchApp.fetch(url); 
var parcedData = JSON.parse(responseAPI.getContentText()); 

Я думаю, я бы взял образец файла ниже, и положить месяцев в столбце A.
выживший флаг в столбце B.
Законопроекты/другой тег в столбце C.
Описание расходов в колонке D, и суммы расходов в колонке E.

{"JANUARY": { 
    "bills":[ 
    ["Electric",122.46], 
    ["Credit",155.44], 
    ["Mortgage",440.05]], 
    "other":[ 
    ["Food",188.33], 
    ["Clothes",89.28]], 
    "Survived":"Y"}, 
"FEBRUARY":{ 
    "bills":[ 
    ["Electric",129.46], 
    ["Credit",155.44], 
    ["Mortgage",440.05], 
    ["Car",298.77], 
    "other":[ 
    ["Food",218.33], 
    ["Clothes",49.28]], 
    "Survived":"N"}, 
"MARCH":{ 
    "bills":[ 
    ["Electric",119.46], 
    ["Credit",155.44], 
    ["Mortgage",440.05]], 
    "other":[ 
    ["Food",218.33], 
    ["Clothes",49.28], 
    ["Insurance",250.98], 
    "Survived":"Y"}} 

Да, я хотел бы получить некоторую помощь со сценарием, но и, если вы могли бы дать объяснение того, что вы делаете, и как она работает, что бы будь великим, чтобы я мог ходить Если это произойдет в следующий раз.

Спасибо!
Colten

+2

Первый шаг - действительно подумать о том, как вы хотите структурировать данные в своей электронной таблице. Я бы не написал ни одной строки кода, пока вы не обрадуетесь этому. Если вы измените свой макет данных на листе, это может означать полную переделку кода. –

+0

Я указал это в вопросе, однако, я не привязан к этому конкретному макету. Как только я получу данные в электронную таблицу, я могу манипулировать ею с помощью фильтров/сортов/формул ... но на данный момент я не могу ее получить, и это то, что я ищу. Кроме того, я не обязательно хочу, чтобы кто-то просто написал код, и я его копирую, я хочу это понять ... Я хочу научиться ловить рыбу ... таким образом, я могу переписать, если нужно, чтобы дать мне разные результаты в будущее. – Colten

+0

Вы хотите, чтобы все расходы были в одном ряду? Если вам нужны строки moultiple, как это должно быть обработано? особенно с векселями и другими. Повторяются ли метки месяца за каждый счет? Является ли метка типа расхода повторяющейся для каждого расхода? Как насчет выживания? Просто сказать, что в каждом столбце не определяет формат. –

ответ

0

Мне было интересно узнать, как получить все свойства объектов, потому что их структура не так проста, поэтому я дал ей попробовать, не уверенный, что я прав, но это может быть хорошей отправной точкой ,

Ниже приведен код, первая часть которого состоит в простоте объекта с той же структурой, вторая часть анализирует его и строит массив, который непосредственно записывается в электронную таблицу.

Я использовал только один месяц в своем тесте, но это не должно быть проблемой, оно должно читать все месяцы в объекте. `` Не стесняйтесь комментировать/критиковать, если я ошибаюсь, как я сказал, что это было мое любопытство, что заставляет меня попробовать;)

(есть много журналов здесь и там, я использую его, чтобы проверить, где я Я ... и чтобы вы себя видите, как она идет)

function myFunction() { 
    var obj = {}; 
    var atr = {} 
    atr["bills"] = [["Electric",122.46],["Credit",155.44],["Mortgage",440.05]]; 
    atr["other"] = [["Food",188.33],["Clothes",89.28]]; 
    atr["Survived"] = "Y"; 
    obj["JANUARY"] = atr; 
    Logger.log("obj = "+JSON.stringify(obj)) ; 
    var ssData = []; 
    var keys = Object.keys(obj); 
    Logger.log("keys = "+JSON.stringify(keys)); 
    for (var k in keys) { 
    var atr = Object.keys(obj[keys[k]]); 
    Logger.log("atr of keys = "+JSON.stringify(atr)); 
    var row = []; 
    row.push(keys[k]); // the month in first column 
    for(var a in atr){ 
     Logger.log("atr[a] = "+atr[a]);// that's the key (bills, survived...) 
     var val = obj[keys[k]];// that ais the value of each key 
     Logger.log("val[atr[a]] = "+JSON.stringify(val[atr[a]])); 
     row.push(atr[a]+" = "+val[atr[a]]);// the values are written in each cell withe their keys 
    } 
    ssData.push(row);// each row is pushed in the final array 
    } 
    SpreadsheetApp.getActiveSheet().getRange(1,1,ssData.length, ssData[0].length).setValues(ssData); 
} 
+0

Спасибо, Серж, это меня очень близко. [link] (https://docs.google.com/spreadsheets/d/1Xff0RmLzcdQvzlQG-WbMyKUtVZW5u6On_TaVn57iwv8/pubhtml?gid=0&single=true) Как вы можете видеть, он вытащил текст, но он не помещал данные в строки. Он поместил весь подробный текст в B1 & C1. Есть ли способ заставить это сделать это? В идеале мне хотелось бы пять строк, когда я закончил с января. 1 строка для каждой суммы. – Colten

+0

Я смог взять ваш код и поместить ячейки в формат CSV ... все данные в одной ячейке. Я пытаюсь теперь разбить эти данные с CSV на таблицу со строкой на каждые 2 значения. Например, моя ячейка CSV - 1 строка, например ** Electric, 122.46, Credit, 155.44, Mortgage, 440.05 **. Я пытаюсь взять эту 1 ячейку и сделать ее в 3 ряда. – Colten

+1

Можете ли вы опубликовать изображение ожидаемого результата? Я не уверен, что я точно понимаю, как должен выглядеть макет. Кроме того, ссылка выше показывает данные, которые не похожи на данные в вашем вопросе, поэтому пример фактических данных, которые вы используете, будет отличным. –

0

Это близко к тому, что я хочу сделать, или так близко, как я могу получить. Я использовал фактический файл JSON, который я хочу извлечь из этого примера. Я не знаю, как обойти Hardcoding ключа. Мне придется продолжать исследования. Я также хочу либо добавить другие значения валюты полностью вниз по листу, либо создать новые листы для каждого автоматически. Это, однако, начало.

// Pull data and populate screadsheet 
function pullJSON() { 

    var ss = SpreadsheetApp.openById('Your Spreadsheet ID Here') 
    var sheets = ss.getSheets(); 
    var sheet = ss.getActiveSheet(); 

    // Clear Columns A through E 
    sheet.getRange('A2:E20000').clearContent(); 

    var url="https://poloniex.com/public?command=returnOrderBook&currencyPair=ALL"; 
    var response = UrlFetchApp.fetch(url); // get feed 
    var json = JSON.parse(response.getContentText()); // 


    var currency = "BTC_XMR"; 
    var asks = []; 
    var bids = []; 
    asks.push(['askRate', 'askAmount']); 
    bids.push(['bidRate', 'bidAmount']); 
    for(var key in json.BTC_XMR.asks) 
    { 
    asks.push(json.BTX_XMR.asks[key]); 
    bids.push(json.BTC_XMR.bids[key]); 
    } 

    askRange = sheet.getRange(1, 2, asks.length, 2); 
    askRange.setValues(asks); 
    bidRange = sheet.getRange(1, 4, bids.length, 2); 
    bidRange.setValues(bids); 
    currencyRange = sheet.getRange(1, 1, asks.length, 1); 
    currencyRange.setValue(currency); 

} 
Смежные вопросы