Я хочу получать автоматические предложения с Youtube, используя следующий вызов:
await fetch('https://suggestqueries.google.com/complete/search?client=youtube&ds=yt&q=skrillex&callback=suggestCallback')
.then(response => console.info(response))
В результате этот вызов получает следующий JSON:
"suggestCallback && suggestCallback(["skrillex",[["skrillex",0],["skrillex bangarang",0],["skrillex make it bun dem",0],["skrillex scary monsters and nice sprites",0],["skrillex cinema",0],["skrillex live",0],["skrillex first of the year",0],["skrillex sicko mode",0],["skrillex kyoto",0],["skrillex remix",0]],{"k":1,"q":"bEJKh2TVzWqSICI3U3xEdXTC00g"}])"
Однако я изо всех сил пытаюсь преобразовать этот результат в массив «фактических предложений». Например, я хочу сохранить JSON, полученный выше, в следующем формате:
let myArray = ["skrillex", "skrillex bangarang", "skrillex make it bun dem", "skrillex scary monsters and nice sprites", "skrillex cinema", "skrillex live", "skrillex first of the year", "skrillex sicko mode", "skrillex kyoto" ,"skrillex remix"]
Что было бы жизнеспособным решением для достижения этого?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Один из способов сделать это — использовать регулярное выражение для фильтрации ответа json из полученного вами ответа, а затем создать массив из этого результата.
let jsonp = 'suggestCallback && suggestCallback(["skrillex",[["skrillex",0],["skrillex bangarang",0],["skrillex make it bun dem",0],["skrillex scary monsters and nice sprites",0],["skrillex cinema",0],["skrillex live",0],["skrillex first of the year",0],["skrillex sicko mode",0],["skrillex kyoto",0],["skrillex remix",0]],{"k":1,"q":"bEJKh2TVzWqSICI3U3xEdXTC00g"}])';
let myRe = /\[(.*)\]/g;
let regExGroups = myRe.exec(jsonp);
let json = JSON.parse(regExGroups[0]);
let myArray = [];
json[1].forEach((element) => {
myArray.push(element[0]);
});
console.info('suggestions array', myArray);https://jsfiddle.net/zeonfrost/s7b4aLr6/
Но то, что вам действительно нужно сделать, это, вероятно, определить функцию submitCallback что такое jsonp.
Ваш результат на самом деле JSONP, вы должны иметь возможность удалить его часть, отличную от JSON, прежде чем запускать
JSON.parse()на нем с помощью регулярных выражений. Со значением вы можете перейти к интересующему вас пути, то есть[1], а затем использоватьArray.prototype.map(), чтобы преобразовать его в интересующую вас структуру данных.