У меня есть функция в Javascript для сопоставления текста между фигурными скобками (включая фигурные скобки) для извлечения строки JSON из разных постов. Ниже приведена функция:
function eventObject(value) {
var json = text.match(/{([^}]+)}/)[0]; // matches content between curly braces
return json;
}
Ввод выглядит следующим образом:
{
"host": "Host link..",
"info": "Info text...",
"links": [ {"title": "link_title", "url": "link_url"}, {"title": "link_title_2", "url": "link_url_2"} ],
"category": "campfire"
}
Проблема в том, что этот текст содержит вложенную строку с более фигурными скобками. Вывод обрезается, как только он попадает в первое вхождение закрывающей скобки в ссылках. Как я могу предотвратить это, чтобы получить полную строку?
Обновление
Я понял, что упустил некоторую важную информацию, чтобы упростить мой вопрос: ответ API - это строка raw html, которая содержит строку Я хотел бы разобрать как объект. Типичное значение HTML выглядит следующим образом:
"cooked":"<pre><code class=\"lang-auto\">{\n\"host\": \"host_link\",\n\"info\": \"event_info\",\n\"links\": [{\"title\": \"link_title \", \"url\": \"link_url"},{\"title\": \"link_two_title \", \"url\": \"link_two_url\"} ],\n\"category\": \"category\"\n}\n
"}
Задача состоит в извлечении всей строки между <code>
и разборе ее в объект. У меня есть обновил заголовок вопроса, чтобы отразить это.
Следующая функция успешно извлекает строку и удаляет теги html и разрывы строк, но неправильно обрабатывает ее как объект:
function eventObject(value){
const doc = new DOMParser().parseFromString(value, "text/html");
var json = [...doc.querySelectorAll('code')].map(code => code.textContent); // DOMParser extracts text between <code> tags
var final = String(json).replace(/\n/g, " ").replace(/[\u2018\u2019]/g, "'").replace(/[\u201C\u201D]/g, '"'); // removes line breaks and replaces curly quotes with straight quotes
var string = JSON.stringify(final);
var obj = JSON.parse("'" + string + "'");
return obj;
}