Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何从JSON字符串中删除不需要的字符(括号、引号和逗号)?_Json_Google Apps Script_Google Sheets - Fatal编程技术网

如何从JSON字符串中删除不需要的字符(括号、引号和逗号)?

如何从JSON字符串中删除不需要的字符(括号、引号和逗号)?,json,google-apps-script,google-sheets,Json,Google Apps Script,Google Sheets,我一直在从事一个项目,该项目将能够在谷歌地图上输入一个地点的名称,然后使用地点API和地点详细信息来获取相关信息 我得到的一点信息是开放的营业时间,称为场所。工作日的文本如下: "[ "Monday: 2:00 – 10:00 PM", "Tuesday: 2:00 – 10:00 PM", "Wednesday: 2:00 – 10:00 PM", "Thursday: 2:00 – 10:00 P


我一直在从事一个项目,该项目将能够在谷歌地图上输入一个地点的名称,然后使用地点API和地点详细信息来获取相关信息

我得到的一点信息是开放的营业时间,称为
场所。工作日的文本
如下:

"[

 "Monday: 2:00 – 10:00 PM",

 "Tuesday: 2:00 – 10:00 PM",

 "Wednesday: 2:00 – 10:00 PM",

 "Thursday: 2:00 – 10:00 PM",

 "Friday: 12:00 – 11:00 PM",

 "Saturday: 12:00 – 11:00 PM",

 "Sunday: 12:00 – 9:00 PM"

]"
我已尝试在stringify结束时使用replace:

JSON.stringify(place.opening_hours.weekday_text, "", 1).replace("[", "").replace("\"", "").replace("\",", "").replace("]", "")
但这最多只涉及周一

有没有办法去掉额外的方括号、逗号和引号,使其返回一个漂亮整洁的版本,如图所示

Saturday    12PM–12AM
Sunday  12–8PM
Monday  Closed
Tuesday Closed
Wednesday   3–11PM
Thursday    3–11PM
Friday  3PM–12AM
以下是我的代码的相关部分:

//Gets the Place ID
function COMBINED(text) {
  var API_KEY = 'AIzxxxxxxxxxxxxxxxxxxxxxxxxx';
  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 'Give me a Google Places URL...';
  }

  var response2 = UrlFetchApp.fetch(queryUrl2);
  var json2 = response2.getContentText();
  var place = JSON.parse(json2).result;


  return [[ place.name,
            place.formatted_address,
            place.formatted_phone_number,
            place.website,
            place.url,
            //JSON.stringify(place.opening_hours.weekday_text, "", 1).replace("[", "").replace("\"", "").replace("\",", "").replace("]", ""),
          ]];
}
如果我们在Google表单上输入“Big Alice Brewing”并转到生成的网页,您将看到以下内容

:


更新了仍需要帮助的代码:

  var response2 = UrlFetchApp.fetch(queryUrl2);
  var json2 = response2.getContentText();
  var place = JSON.parse(json2).result;

  var placeName = place.name;
  var placeAddress = place.formatted_address;
  var placePhoneNumber = place.formatted_phone_number;
  var placeWebsite = place.website;
  var placeURL = place.url;

  var weekdayTextList = place.opening_hours.weekday_text;
  weekdayTextList.forEach((weekdayText) => {
  console.log( weekdayText );
} );



  return [[ placeName,
            placeAddress,
            placePhoneNumber,
            placeWebsite,
            placeURL
          ]];

最终更新:这是最后一点帮助后的工作代码。

function writeToSpreadsheet() {
  var results = COMBINED2('');
  var sheet = SpreadsheetApp.getActiveSheet();
  sheet.getRange(1, 1, 1, 6).setValues(results);
}


function COMBINED2(text) {
  var API_KEY = 'AIzcxxxxxxxxxxxxxxxxxxxxxxxxx';
  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 'Give me a Google Places URL...';
  }

  var response2 = UrlFetchApp.fetch(queryUrl2);
  var json2 = response2.getContentText();
  var place = JSON.parse(json2).result;

  var placeName = place.name;
  var placeAddress = place.formatted_address;
  var placePhoneNumber = place.formatted_phone_number;
  var placeWebsite = place.website;
  var placeURL = place.url;

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

您已经有了字符串中的JSON数据,因此需要将其解析为JavaScript对象(本例中为数组):

这将为您提供一个可以迭代的数据结构,以干净的方式提取每个项

下面是一个演示:

var jsonString='[“周一:下午2:00–10:00”,“周二:下午2:00–10:00”,“周三:下午2:00–10:00”,“周四:下午2:00–10:00”,“周五:下午12:00–11:00”,“周六:下午12:00–11:00”,“周日:下午12:00–9:00”];
var businessHours=JSON.parse(jsonString);
每小时营业时间((工作日)=>{
console.log(bizDay);

} );当前我的代码获取一个地方的URL并解析文本。我需要创建一个新的变量来解析这个特定的元素吗?有趣-保留
response2.getContentText()的确切内容可能更容易
并返回它,而不是返回当前返回的内容。但我们需要看看这段文字是什么样子。您是否可以编辑您的问题以将此数据显示为文本?我可以相应地更新我的答案。底线是:应该不需要对那些
replace()
函数进行额外的解析。但这完全取决于原始响应的样子。用代码更新了主帖。但是你应该能够从我的谷歌应用程序脚本顶部的链接中查看/编辑我的代码。这是一个名为“COMBINED”的函数对不起,我要找的不是代码,而是JSON文本字符串,我在问题本身中看不到。它可能可以通过链接访问,但我宁愿避免这些。
function writeToSpreadsheet() {
  var results = COMBINED2('');
  var sheet = SpreadsheetApp.getActiveSheet();
  sheet.getRange(1, 1, 1, 6).setValues(results);
}


function COMBINED2(text) {
  var API_KEY = 'AIzcxxxxxxxxxxxxxxxxxxxxxxxxx';
  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 'Give me a Google Places URL...';
  }

  var response2 = UrlFetchApp.fetch(queryUrl2);
  var json2 = response2.getContentText();
  var place = JSON.parse(json2).result;

  var placeName = place.name;
  var placeAddress = place.formatted_address;
  var placePhoneNumber = place.formatted_phone_number;
  var placeWebsite = place.website;
  var placeURL = place.url;

  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;
}
JSON.parse(jsonString)