如何移除JSON字符串中的括号、引号、逗号 处理谷歌Places API营业时间
问题描述
- 基于Google App Script开发Google Sheets工具,可接收用户输入的Google Maps商户名称,调用Places API拉取商户的名称、地址、联系电话、官网、营业时间等信息
- 拉取到的营业时间对应字段为
place.opening_hours.weekday_text,本身是字符串数组,直接使用JSON.stringify加单次replace处理无法清除所有多余的括号、引号、逗号,最多只能展示周一的营业时间 - 需求是将营业时间按行整齐展示在单个单元格内,无多余符号
错误实现思路
直接对数组执行JSON序列化后替换符号,由于JS的非全局replace只会匹配第一个符合规则的字符,无法处理数组内所有冗余符号,代码示例:
JSON.stringify(place.opening_hours.weekday_text, "", 1).replace("[", "").replace("\"", "").replace("\",", "").replace("]", "")
正确解决方法
不需要对数组做序列化处理,weekday_text本身的每一项已经是格式化完成的营业时间字符串,直接遍历数组拼接内容、添加换行符即可:
function writeToSpreadsheet() { var results = COMBINED2(''); var sheet = SpreadsheetApp.getActiveSheet(); sheet.getRange(1, 1, 1, 6).setValues(results); } function COMBINED2(text) { var API_KEY = '替换为你自己的Places API密钥'; // 替换为你自己的定位坐标参数 var LOC_BASIS_LAT_LON = '40.754734421655655, -73.98840133506883'; var baseUrl = 'https://maps.googleapis.com/maps/api/place/findplacefromtext/json'; var queryUrl = baseUrl + '?input=' + text + '&inputtype=textquery&key=' + API_KEY + "&locationbias=point:" + LOC_BASIS_LAT_LON; var response = UrlFetchApp.fetch(queryUrl); var json = response.getContentText(); var placeId = JSON.parse(json); var ID = placeId.candidates[0].place_id; var fields = 'name,formatted_address,formatted_phone_number,website,url,types,opening_hours'; var baseUrl2 = 'https://maps.googleapis.com/maps/api/place/details/json?placeid='; var queryUrl2 = baseUrl2 + ID + '&fields=' + fields + '&key='+ API_KEY + "&locationbias=point:" + LOC_BASIS_LAT_LON; if (ID == '') { return '请输入正确的商户名称'; } var response2 = UrlFetchApp.fetch(queryUrl2); var json2 = response2.getContentText(); var place = JSON.parse(json2).result; // 拼接营业时间 var weekdays = ''; place.opening_hours.weekday_text.forEach((weekdayText) => { weekdays += ( weekdayText + '\r\n' ); } ); var data = [ [ place.name, place.formatted_address, place.formatted_phone_number, place.website, place.url, weekdays.trim() ] ]; return data; }
实现效果
营业时间会按天换行展示在对应单元格内,格式如下:
Monday: 4:00 – 9:00 PM Tuesday: 4:00 – 9:00 PM Wednesday: 4:00 – 9:00 PM Thursday: 4:00 – 9:00 PM Friday: 12:00 – 10:00 PM Saturday: 12:00 – 10:00 PM Sunday: 12:00 – 8:00 PM
内容的提问来源于stack exchange,提问作者Jeff Abrahams
相关产品推荐
相关产品推荐

