php小编新一在使用JavaScript格式化JSON时可能会遇到一个常见问题,即由于数据中的双引号标志,导致出现错误。这是因为在JavaScript中,双引号用于定义字符串,所以当数据中出现双引号时,JavaScript会将其解析为字符串的结束标志,从而导致错误。为了解决这个问题,可以使用转义字符\"来转义双引号,告诉JavaScript这是一个普通的双引号而不是字符串的结束标志,从而成功格式化JSON数据。
我使用以下代码片段,在页面上清晰地显示
1 2 3 4 5 6 7 8 9 10 |
|
ログイン後にコピー
但是,当数据中存在双引号 (") 时,我会收到错误。
注意:json 中有问题的字段是“description”键值中的“hardcore”部分。
错误:
1
2
3
4
5
6
7
8
9
10
11
12
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
.
.
.
ログイン後にコピー
我尝试了各种正则表达式方法来纠正双引号,但这些方法导致插入不应插入转义字符的位置,或者根本不起作用。
这是
1
2
<code></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}}}</code>
ログイン後にコピー
我尝试了方法1:
1
2
3
4
5
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);
ログイン後にコピー
注意:json 中有问题的字段是“description”键值中的“hardcore”部分。
输入:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
{
"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
}
ログイン後にコピー
输出:
1
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}
ログイン後にコピー
我尝试了方法2:
1
2
3
4
5
6
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);
ログイン後にコピー
方法 2 的输出与输入相同。
我想要的只是 json 文本看起来像这样。
预先感谢您的帮助。
解决方法
由于您使用带有 handlebars 的 goland 模板,如果描述字段包含引号(如您所描述的),您的 json 格式将会失败。您的扩展字符串:
1
"description"
:
"elon musk says workers at the social media firm must be "
hardcore
" if they want to stay, reports say."
,
ログイン後にコピー
需要转义为:
1
"description"
:
"elon musk says workers at the social media firm must be \"hardcore\" if they want to stay, reports say."
,
ログイン後にコピー
我不熟悉 golang 的 handlebars,但假设它与常规 handlebars 兼容,您可以注册一个辅助函数来正确转义双引号,以便使用,例如:
1
"description"
:
"{{{escapequotes .description}}}"
,
ログイン後にコピー
定义辅助函数来转义引号,如下所示:
1
2
3
Handlebars.registerHelper(
'escapeQuotes'
,
function
(aString) {
return
aString.replace(/
"/g, '\\"
');
});
ログイン後にコピー
您可以在 handlebars 游乐场上尝试一下,网址为 https://www.php.cn/link/fd92a703e837c873aca02bf1edfafcfe一个>
以上がJavaScript を使用して JSON をフォーマットすると、データ内の「(二重引用符)」フラグが原因でエラーが発生しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。
前の記事:mongodb ドキュメントから要素を取得し、go mongo ドライバーを使用してその値を更新するのに助けが必要です
次の記事:golang でミューテックスがチャネルより遅いのはなぜですか?
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
-
2025-02-26 03:58:14
-
2025-02-26 03:38:10
-
2025-02-26 03:17:10
-
2025-02-26 02:49:09
-
2025-02-26 01:08:13
-
2025-02-26 00:46:10
-
2025-02-25 23:42:08
-
2025-02-25 22:50:13
-
2025-02-25 21:54:11
-
2025-02-25 20:45:11
最新の問題
function_exists() はカスタム関数を決定できません
Function test () {return true;} if (function_exists ('test')) {echo "テストは関数です";
から 2024-04-29 11:01:01
0
3
2913
Google Chromeのモバイル版を表示する方法
こんにちは、先生、Google Chrome をモバイル版に変更するにはどうすればよいですか?
から 2024-04-23 00:22:19
0
11
3102
親ウィンドウには出力がありません
document.onclick = function(){ window.opener.document.write('私は子ウィンドウの出力です');
から 2024-04-18 23:52:34
0
1
2474