Maison > développement back-end > Golang > Lors du formatage de JSON à l'aide de JavaScript, j'obtiens une erreur due à l'indicateur '(guillemet double) dans les données

Lors du formatage de JSON à l'aide de JavaScript, j'obtiens une erreur due à l'indicateur '(guillemet double) dans les données

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Libérer: 2024-02-09 16:10:08
avant
1365 Les gens l'ont consulté

使用 JavaScript 格式化 JSON 时,由于数据中的“(双引号)标志,我收到错误

php小编新一在使用JavaScript格式化JSON时可能会遇到一个常见问题,即由于数据中的双引号标志,导致出现错误。这是因为在JavaScript中,双引号用于定义字符串,所以当数据中出现双引号时,JavaScript会将其解析为字符串的结束标志,从而导致错误。为了解决这个问题,可以使用转义字符\"来转义双引号,告诉JavaScript这是一个普通的双引号而不是字符串的结束标志,从而成功格式化JSON数据。

问题内容

我使用以下代码片段,在页面上清晰地显示

</code> 标记中的所有 json 字符串,其中 <code>id="jsontext"</code> 。</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>var p = document.queryselectorall("#jsontext");

var parray = [...p]

parray.foreach(p => {
var data = p.textcontent;

p.textcontent = json.stringify(json.parse(data), null, 2);
});
Copier après la connexion

但是,当数据中存在双引号 (") 时,我会收到错误。

注意:json 中有问题的字段是“description”键值中的“hardcore”部分。

错误:

jquery.min.js:2 uncaught syntaxerror: expected ',' or '}' after property value in json at position 289
    at json.parse (<anonymous>)
    at getnews:152:33
    at array.foreach (<anonymous>)
    at htmldocument.<anonymous> (getnews:143:20)
    at e (jquery.min.js:2:30005)
    at t (jquery.min.js:2:30307)
(anonymous) @ getnews:152
(anonymous) @ getnews:143
.
.
.
Copier après la connexion

我尝试了各种正则表达式方法来纠正双引号,但这些方法导致插入不应插入转义字符的位置,或者根本不起作用。

这是

</code> 标记中的 json 文本。 (这些字段由 golang 的模板填充。)</p>
<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'><pre id="jsontext">{"guid": "{{.id}}", "title": "{{.title}}", "url": "{{.url}}", "description": "{{.description}}", "sourcename": "{{.sourcename}}", "sourceurl": "{{.sourceurl}}", "imageurl": "{{.imageurl}}", "language": "{{.language}}", "location": "{{.location}}", "time": {{.time}}, "tags": "{{.tags}}", "type": {{.type}}}
Copier après la connexion

我尝试了方法1:

var escapeddata = data.replace(/\"/g, "\\\"");
console.log("escaped json: ", escapeddata);
jsondata = json.parse(escapeddata);
p.textcontent = json.stringify(jsondata, null, 2);
console.log("fixed json: ", p.textcontent);
Copier après la connexion

注意:json 中有问题的字段是“description”键值中的“hardcore”部分。

输入:

{
"guid": "https://www.bbc.co.uk/news/business-63648505", 
"title": "elon musk tells twitter staff to work long hours or leave", 
"url": "https://www.bbc.co.uk/news/business-63648505?at_medium=rss&at_campaign=karanga", 
"description": "elon musk says workers at the social media firm must be "hardcore" if they want to stay, reports say.", 
"sourcename": "bbc", 
"sourceurl": "https://www.bbc.com/news", 
"imageurl": "https://www.bbc.com/news/special/2015/newsspec_10857/bbc_news_logo.png?cb=1", 
"language": "en", 
"location": "uk", 
"time": 1668616715, 
"tags": "", 
"type": 2
}
Copier après la connexion

输出:

escaped json:  {\"guid\": \"https://www.bbc.co.uk/news/business-63648505\", \"title\": \"elon musk tells twitter staff to work long hours or leave\", \"url\": \"https://www.bbc.co.uk/news/business-63648505?at_medium=rss&at_campaign=karanga\", \"description\": \"elon musk says workers at the social media firm must be \"hardcore\" if they want to stay, reports say.\", \"sourcename\": \"bbc\", \"sourceurl\": \"https://www.bbc.com/news\", \"imageurl\": \"https://www.bbc.com/news/special/2015/newsspec_10857/bbc_news_logo.png?cb=1\", \"language\": \"en\", \"location\": \"uk\", \"time\": 1668616715, \"tags\": \"\", \"type\": 2}
Copier après la connexion

我尝试了方法2:

var escapedData = data.replace(/"([^"]+)"/g, function(match, capture) {
 return '"' + capture.replace(/"/g, "\\\"") + '"';
});
jsonData = JSON.parse(escapedData);
p.textContent = JSON.stringify(jsonData, null, 2);
console.log("Fixed JSON: ", p.textContent);
Copier après la connexion

方法 2 的输出与输入相同。

我想要的只是 json 文本看起来像这样。

预先感谢您的帮助。

解决方法

由于您使用带有 handlebars 的 goland 模板,如果描述字段包含引号(如您所描述的),您的 json 格式将会失败。您的扩展字符串:

"description": "elon musk says workers at the social media firm must be "hardcore" if they want to stay, reports say.",
Copier après la connexion

需要转义为:

"description": "elon musk says workers at the social media firm must be \"hardcore\" if they want to stay, reports say.",
Copier après la connexion

我不熟悉 golang 的 handlebars,但假设它与常规 handlebars 兼容,您可以注册一个辅助函数来正确转义双引号,以便使用,例如:

"description": "{{{escapequotes .description}}}",
Copier après la connexion

定义辅助函数来转义引号,如下所示:

Handlebars.registerHelper('escapeQuotes', function (aString) {
    return aString.replace(/"/g, '\\"');
});
Copier après la connexion

您可以在 handlebars 游乐场上尝试一下,网址为 https://www.php.cn/link/fd92a703e837c873aca02bf1edfafcfe一个>

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal