{vardata=p.textcontent;p.textcontent=json.stringify(json.parse(data),null ,2);}); Wenn die Daten jedoch doppelte Anführungszeichen (") enthalten"/> {vardata=p.textcontent;p.textcontent=json.stringify(json.parse(data),null ,2);}); Wenn die Daten jedoch doppelte Anführungszeichen (") enthalten">
suchen
HeimBackend-EntwicklungGolangBeim Formatieren von JSON mit JavaScript erhalte ich eine Fehlermeldung aufgrund des Flags „(doppelte Anführungszeichen) in den Daten

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

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

问题内容

我使用以下代码片段,在页面上清晰地显示 <pre class="brush:php;toolbar:false"></pre> 标记中的所有 json 字符串,其中 id="jsontext"

var p = document.queryselectorall("#jsontext");

var parray = [...p]

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

p.textcontent = json.stringify(json.parse(data), null, 2);
});

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

注意: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
.
.
.

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

这是 <pre class="brush:php;toolbar:false"></pre> 标记中的 json 文本。 (这些字段由 golang 的模板填充。)

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

我尝试了方法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);

注意: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
}

输出:

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:

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 格式将会失败。您的扩展字符串:

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

需要转义为:

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

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

"description": "{{{escapequotes .description}}}",

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

Handlebars.registerHelper('escapeQuotes', function (aString) {
    return aString.replace(/"/g, '\\"');
});

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

Das obige ist der detaillierte Inhalt vonBeim Formatieren von JSON mit JavaScript erhalte ich eine Fehlermeldung aufgrund des Flags „(doppelte Anführungszeichen) in den Daten. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme
Dieser Artikel ist reproduziert unter:stackoverflow. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen
Aufbau skalierbarer Systeme mit der Go -ProgrammierspracheAufbau skalierbarer Systeme mit der Go -ProgrammierspracheApr 25, 2025 am 12:19 AM

GoisidealforbuildingsCalablesSystemsDuetoitsSimplicity, Effizienz und verblüfftem Inconcurrencysupport.1) Go'ScleanSyNtaxandminimalisticDeInenHanceProductivity und ReduzienEirrors.2) ItsgoroutinesandchannelsableCrentCrent-Programme, Distrioutines und ChannelenableCrent-Programme, DistributingworkloNecrent-Programme,

Best Practices für die Verwendung von Init -Funktionen effektiv in GoBest Practices für die Verwendung von Init -Funktionen effektiv in GoApr 25, 2025 am 12:18 AM

Initunctionsingorunautomatischbeforemain () und sarEsfulForsSetingupenvironmentsandinitializingVariables

Die Ausführungsreihenfolge der Init -Funktionen in Go -PaketenDie Ausführungsreihenfolge der Init -Funktionen in Go -PaketenApr 25, 2025 am 12:14 AM

GoinitializespackagesintheordertheyareImported, SheexecuteStfunctionSwitHinapackageInredeDinitionorder und FileNamesDeterminetheorderacrossmultipleFiles

Definieren und Verwenden von benutzerdefinierten Schnittstellen in GoDefinieren und Verwenden von benutzerdefinierten Schnittstellen in GoApr 25, 2025 am 12:09 AM

CustomInterFacesingoarecrucialForwritingFlexible, Wartelable und testableCode

Verwenden von Schnittstellen zum Verspotten und Testen in GoVerwenden von Schnittstellen zum Verspotten und Testen in GoApr 25, 2025 am 12:07 AM

Der Grund für die Verwendung von Schnittstellen für Simulation und Test ist, dass die Schnittstelle die Definition von Verträgen ohne Angabe von Implementierungen ermöglicht, wodurch die Tests isolierter und einfacher werden. 1) Die implizite Implementierung der Schnittstelle erleichtert es einfach, Scheinobjekte zu erstellen, die reale Implementierungen bei den Tests ersetzen können. 2) Die Verwendung von Schnittstellen kann die tatsächliche Implementierung des Dienstes in Unit -Tests problemlos ersetzen und die Komplexität und die Zeit der Tests reduzieren. 3) Die von der Schnittstelle bereitgestellte Flexibilität ermöglicht Änderungen des simulierten Verhaltens für verschiedene Testfälle. 4) Schnittstellen helfen von Anfang an, Testable -Code zu entwerfen und die Modularität und Wartbarkeit des Codes zu verbessern.

Verwenden von Init für die Paketinitialisierung in GoVerwenden von Init für die Paketinitialisierung in GoApr 24, 2025 pm 06:25 PM

In Go wird die Init -Funktion für die Paketinitialisierung verwendet. 1) Die Init -Funktion wird automatisch bei der Paketinitialisierung aufgerufen und ist geeignet, um globale Variablen zu initialisieren, Verbindungen zu setzen und Konfigurationsdateien zu laden. 2) Es kann mehrere Init -Funktionen geben, die in Dateireihenfolge ausgeführt werden können. 3) Bei der Verwendung sollten die Ausführungsreihenfolge, die Testschwierigkeit und die Leistungsauswirkungen in Betracht gezogen werden. 4) Es wird empfohlen, Nebenwirkungen zu reduzieren, die Abhängigkeitsinjektion zu verwenden und die Initialisierung zu verzögern, um die Verwendung von Init -Funktionen zu optimieren.

GO's Select Anweisung: Multiplexing gleichzeitige OperationenGO's Select Anweisung: Multiplexing gleichzeitige OperationenApr 24, 2025 pm 05:21 PM

GO'SSelectstatementsTreamlinesConcurrentProgrammingByMultiplexingoperationen.1) ITallowswaitingonMultiPhanneloperationen, ExecutingTheFirstreadyone) TheDefaultCasepreventsDeadlocksByAntheProgramtoprosectroseverifnooperation.3) itcanpeusedefoursend

Erweiterte Genauigkeitstechniken in Go: Kontext und KarteigruppenErweiterte Genauigkeitstechniken in Go: Kontext und KarteigruppenApr 24, 2025 pm 05:09 PM

Contextandwaitgroupsarecrucialingoforminggoroutineseffektiv.1) contextAllowSsignalingCancellationanddeadlinesAcrossapiobears, Sicherstellung von Goroutinescanbesten

See all articles

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

Video Face Swap

Video Face Swap

Tauschen Sie Gesichter in jedem Video mühelos mit unserem völlig kostenlosen KI-Gesichtstausch-Tool aus!

Heiße Werkzeuge

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Leistungsstarke integrierte PHP-Entwicklungsumgebung

SublimeText3 Englische Version

SublimeText3 Englische Version

Empfohlen: Win-Version, unterstützt Code-Eingabeaufforderungen!

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SAP NetWeaver Server-Adapter für Eclipse

SAP NetWeaver Server-Adapter für Eclipse

Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.

WebStorm-Mac-Version

WebStorm-Mac-Version

Nützliche JavaScript-Entwicklungstools