我設法使用 Google Apps 腳本下載了一個 JSON 檔案。很快,我發現我的 JSON 比互聯網上的示例(包括這里)有些復雜。
var json = {"block1":[{"TRD_DD":"2021/12/22","MKTCAP":"2,208,300,470,743,887","FORN_HD_MKTCAP":"740,740,079,190,175","MKTCAP_RTO":"33.54","LIST_SHRS":"61,701,475,584","FORN_HD_SHRS":"11,191,374,601","LIST_SHRS_RTO":"18.14"},{"TRD_DD":"2021/12/21","MKTCAP":"2,200,896,109,564,335","FORN_HD_MKTCAP":"736,382,905,931,787","MKTCAP_RTO":"33.46","LIST_SHRS":"61,701,475,584","FORN_HD_SHRS":"11,198,948,564","LIST_SHRS_RTO":"18.15"},{"TRD_DD":"2021/12/20","MKTCAP":"2,191,456,183,748,063","FORN_HD_MKTCAP":"731,379,899,525,089","MKTCAP_RTO":"33.37","LIST_SHRS":"61,698,916,232","FORN_HD_SHRS":"11,215,916,966","LIST_SHRS_RTO":"18.18"}],"CURRENT_DATETIME":"2021.12.22 PM 04:24:06"}
“Block1”中有更多陣列,但我縮短了長度。請考慮多行(我認為大約 500 行)
我想給出不同的列名,如“AAA”、“BBB”、“CCC”、“DDD”、“EEE”、“FFF”、“GGG”而不是“TRD_DD”、“MKTCAP”、“FORN_HD_MKTCAP” , "MKTCAP_RTO", "LIST_SHRS", "FORN_HD_SHRS", "LIST_SHRS_RTO"。應該在每一行中插入同名的每個值(對不起,StackOverflow 不允許我插入影像。很難解釋)。
如果可能,我想將所有數字更改為數字而不是字串。
我是處理javascript的初學者,所以很難!!!有沒有人可以幫助我?如果有的話,將不勝感激。
***附錄
這是我的原始腳本
function foreign_daily(){
var url = 'http://data.krx.co.kr/comm/bldAttendant/getJsonData.cmd';
var formData = {
"bld": "dbms/MDC/STAT/standard/MDCSTAT03601",
"mktId": "STK",
"strtDd": "20211220",
"endDd": "20211222",
"share": "2",
"money": "3",
"csvxls_isNo": "false"};
var headers = {
"Accept": "application/json, text/javascript, */*; q=0.01",
"Accept-Encoding": "gzip, deflate",
"Accept-Language": "ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7",
"Connection": "keep-alive",
"Content-Type": "application/x-www-form-urlencoded; charset=UTF-8",
"Origin": "http://data.krx.co.kr",
"Referer": "http://data.krx.co.kr/contents/MDC/MDI/mdiLoader/index.cmd?menuId=MDC0201020503",
"User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/94.0.4606.118 Whale/2.11.126.23 Safari/537.36",
"X-Requested-With": "XMLHttpRequest"
};
Logger.log(JSON.stringify(formData));
var options = {
'method' : 'post',
'contentType': 'application/x-www-form-urlencoded; charset=UTF-8',
'headers': headers,
'payload': formData
};
var json = UrlFetchApp.fetch(url, options);
// Object for converting the keys.
var obj = {"TRD_DD": "AAA", "MKTCAP": "BBB", "FORN_HD_MKTCAP": "CCC", "MKTCAP_RTO": "DDD", "LIST_SHRS": "EEE", "FORN_HD_SHRS": "FFF", "LIST_SHRS_RTO": "GGG"};
// Converting keys.
json.block1 = json.block1.map(o => Object.fromEntries(Object.entries(o).map(([k, v]) => [obj[k], v.includes(",") ? v.split(",").map(e => Number(e)) : v])));
console.log(json)
// Put the values to Spreadsheet.
var header = ["AAA", "BBB", "CCC", "DDD", "EEE", "FFF", "GGG"];
var values = json.block1.flatMap(o => {
var temp = header.map(h => o[h]);
var max = Math.max(...temp.map(r => Array.isArray(r) ? r.length : 1));
temp = temp.map(r => {
if (Array.isArray(r)) {
return r.length == max ? r : [...r, ...Array(max - r.length).fill("")];
}
return [r, ...Array(max - 1).fill("")]; // or return Array(max).fill(r);
})
return temp[0].map((_, c) => temp.map(r => r[c]));
});
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("sheet126"); // Please set the sheet name.
sheet.getRange(sheet.getLastRow() 1, 1, values.length, values[0].length).setValues(values);
現在它說
TypeError: Cannot read property 'map' of undefined
foreign_daily @ Foreign_daily.gs:42
再次感謝,田池!
在此處輸入圖片說明
uj5u.com熱心網友回復:
我相信你的目標如下。
- 您想將密鑰從 更改
"TRD_DD", "MKTCAP", "FORN_HD_MKTCAP", "MKTCAP_RTO", "LIST_SHRS", "FORN_HD_SHRS", "LIST_SHRS_RTO"為"AAA", "BBB", "CCC", "DDD", "EEE", "FFF", "GGG"。 - 您想將類似的值轉換為類似
"2,208,300,470,743,887"的數字[2,208,300,470,743,887]。 - 您想使用 Google Apps 腳本來實作這一點。
在這種情況下,以下示例腳本如何?
示例腳本:
// This is from your question.
var json = {"block1":[{"TRD_DD":"2021/12/22","MKTCAP":"2,208,300,470,743,887","FORN_HD_MKTCAP":"740,740,079,190,175","MKTCAP_RTO":"33.54","LIST_SHRS":"61,701,475,584","FORN_HD_SHRS":"11,191,374,601","LIST_SHRS_RTO":"18.14"},{"TRD_DD":"2021/12/21","MKTCAP":"2,200,896,109,564,335","FORN_HD_MKTCAP":"736,382,905,931,787","MKTCAP_RTO":"33.46","LIST_SHRS":"61,701,475,584","FORN_HD_SHRS":"11,198,948,564","LIST_SHRS_RTO":"18.15"},{"TRD_DD":"2021/12/20","MKTCAP":"2,191,456,183,748,063","FORN_HD_MKTCAP":"731,379,899,525,089","MKTCAP_RTO":"33.37","LIST_SHRS":"61,698,916,232","FORN_HD_SHRS":"11,215,916,966","LIST_SHRS_RTO":"18.18"}],"CURRENT_DATETIME":"2021.12.22 PM 04:24:06"};
// Object for converting the keys.
var obj = {"TRD_DD": "AAA", "MKTCAP": "BBB", "FORN_HD_MKTCAP": "CCC", "MKTCAP_RTO": "DDD", "LIST_SHRS": "EEE", "FORN_HD_SHRS": "FFF", "LIST_SHRS_RTO": "GGG"};
// Converting keys.
json.block1 = json.block1.map(o => Object.fromEntries(Object.entries(o).map(([k, v]) => [obj[k], v.includes(",") ? v.split(",").map(e => Number(e)) : v])));
console.log(json)
參考:
- 地圖()
添加1:
關于Another goal I'd like to achieve is to upload it into a google sheet.在您的評論中,以下示例腳本如何?
示例腳本:
// This is from your question.
var json = {"block1":[{"TRD_DD":"2021/12/22","MKTCAP":"2,208,300,470,743,887","FORN_HD_MKTCAP":"740,740,079,190,175","MKTCAP_RTO":"33.54","LIST_SHRS":"61,701,475,584","FORN_HD_SHRS":"11,191,374,601","LIST_SHRS_RTO":"18.14"},{"TRD_DD":"2021/12/21","MKTCAP":"2,200,896,109,564,335","FORN_HD_MKTCAP":"736,382,905,931,787","MKTCAP_RTO":"33.46","LIST_SHRS":"61,701,475,584","FORN_HD_SHRS":"11,198,948,564","LIST_SHRS_RTO":"18.15"},{"TRD_DD":"2021/12/20","MKTCAP":"2,191,456,183,748,063","FORN_HD_MKTCAP":"731,379,899,525,089","MKTCAP_RTO":"33.37","LIST_SHRS":"61,698,916,232","FORN_HD_SHRS":"11,215,916,966","LIST_SHRS_RTO":"18.18"}],"CURRENT_DATETIME":"2021.12.22 PM 04:24:06"};
// Object for converting the keys.
var obj = {"TRD_DD": "AAA", "MKTCAP": "BBB", "FORN_HD_MKTCAP": "CCC", "MKTCAP_RTO": "DDD", "LIST_SHRS": "EEE", "FORN_HD_SHRS": "FFF", "LIST_SHRS_RTO": "GGG"};
// Converting keys.
json.block1 = json.block1.map(o => Object.fromEntries(Object.entries(o).map(([k, v]) => [obj[k], v.includes(",") ? v.split(",").map(e => Number(e)) : v])));
console.log(json)
// Put the values to Spreadsheet.
var header = ["AAA", "BBB", "CCC", "DDD", "EEE", "FFF", "GGG"];
var values = json.block1.flatMap(o => {
var temp = header.map(h => o[h]);
var max = Math.max(...temp.map(r => Array.isArray(r) ? r.length : 1));
temp = temp.map(r => {
if (Array.isArray(r)) {
return r.length == max ? r : [...r, ...Array(max - r.length).fill("")];
}
return [r, ...Array(max - 1).fill("")]; // or return Array(max).fill(r);
})
return temp[0].map((_, c) => temp.map(r => r[c]));
});
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1"); // Please set the sheet name.
sheet.getRange(sheet.getLastRow() 1, 1, values.length, values[0].length).setValues(values);
- 在上面的腳本中,如果您只想為一個值嵌入相同的值,請替換
return [r, ...Array(max - 1).fill("")];為return Array(max).fill(r);.
添加2:
從您的以下回復中,
然而,有一件事是,轉換為數字不是我想要的。逗號“,”不分隔不同的數字,而只是用于貨幣計數的分隔符,例如 100 萬美元 (1,000,000$)。我想要“1,000,000”到“1000000”,而不是1、000和000。
下面的示例腳本怎么樣?
示例腳本:
// Object for converting the keys.
var obj = {"TRD_DD": "AAA", "MKTCAP": "BBB", "FORN_HD_MKTCAP": "CCC", "MKTCAP_RTO": "DDD", "LIST_SHRS": "EEE", "FORN_HD_SHRS": "FFF", "LIST_SHRS_RTO": "GGG"};
json.block1 = json.block1.map(o => Object.fromEntries(Object.entries(o).map(([k, v]) => [obj[k], v.includes(",") ? v.replace(/,/g, "") : v])));
// or json.block1 = json.block1.map(o => Object.fromEntries(Object.entries(o).map(([k, v]) => [obj[k], v.includes(",") ? Number(v.replace(/,/g, "")) : v])));
var header = ["AAA", "BBB", "CCC", "DDD", "EEE", "FFF", "GGG"];
var values = json.block1.map(o => header.map(h => o[h]));
var sheet = SpreadsheetApp.getActiveSpreadsheet().getSheetByName("Sheet1"); // Please set the sheet name.
sheet.getRange(sheet.getLastRow() 1, 1, values.length, values[0].length).setValues(values);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/392672.html
下一篇:比較兩列時如何回傳丟失的資料?
