Как избежать двойных кавычек в JSON

Я пытаюсь показать двойные кавычки, но он показывает одну из обратных косых черт:

"maingame": {
    "day1": {
        "text1": "Tag 1",
        "text2": "Heute startet unsere Rundreise \\\"Example text\\\". Jeden Tag wird ein neues Reiseziel angesteuert bis wir.</strong> "
    }
}

При рендеринге в html он отображается как \"Example text\". Каков правильный путь?

Ответ 1

Попробуйте следующее:

"maingame": {
  "day1": {
    "text1": "Tag 1",
     "text2": "Heute startet unsere Rundreise \" Example text\". Jeden Tag wird ein neues Reiseziel angesteuert bis wir.</strong> "
  }
}

(только одна обратная косая черта (\) перед кавычками).

Ответ 2

Он показывает обратную косую черту, потому что вы также избегаете обратную косую черту.

Помимо двойных кавычек, вы также должны избегать обратных косых черт, если вы хотите включить их в строку, указанную в JSON. Однако, если вы намерены использовать обратную косую черту в escape-последовательности, очевидно, вы не должны ее избегать.

Ответ 3

Когда и где использовать \\\". Хорошо, если вы похожи на меня, вы будете чувствовать себя так же глупо, как я, когда поняли, что я делаю после того, как я нашел эту тему.

Если вы создаете текстовый файл/поток .json и импортируете данные оттуда, тогда ответ основного потока всего одного обратного слэша перед двойными кавычками: \" - тот, который вы ищете.

Однако, если вы похожи на меня, и вы пытаетесь заставить w3schools.com "Tryit Editor" иметь двойные кавычки на выходе JSON.parse(text), то тот, который вы ищете это тройная обратная косая черта с двойными кавычками \\\". Это связано с тем, что вы создаете текстовую строку в блоке HTML <script>, а первая двойная обратная косая черта вставляет одиночную обратную косую черту в строковую переменную, а следующая двойная кавычка обратной косой вставки двойной кавычки в строку, так что полученный script строка содержит \" из стандартного ответа, и парсер JSON будет анализировать это как только двойные кавычки.

<script>
  var text="{";
  text += '"quip":"\\\"If nobody is listening, then you\'re likely talking to the wrong audience.\\\""';
  text += "}";
  var obj=JSON.parse(text);
</script>

+1: поскольку это текстовая строка JavaScript, двойная кавычка с двойным обратным слэшем \\" тоже будет работать; потому что двойная кавычка не нуждается в экранировании в одной кавычной строке, например, '\"' и '"' приводит к той же строке JS.

Ответ 4

Обратите внимание, что это чаще всего происходит, когда контент был "дважды закодирован", что означает, что алгоритм кодирования случайно был вызван дважды.

Первый вызов будет кодировать значение "text2":

FROM: Heute startet unsere Rundreise "Пример текста". Jeden Tag wird ein neues Reiseziel angesteuert bis wir.

TO: Heute startet unsere Rundreise\ "Пример текста \". Jeden Tag wird ein neues Reiseziel angesteuert bis wir.

Второе кодирование затем преобразует его снова, экранируя уже экранированные символы:

FROM: Heute startet unsere Rundreise\ "Пример текста \". Jeden Tag wird ein neues Reiseziel angesteuert bis wir.

TO: Heute startet unsere Rundreise \\\ "Пример текста \\\". Jeden Tag wird ein neues Reiseziel angesteuert bis wir.

Итак, если вы отвечаете за реализацию сервера здесь, проверьте, чтобы не было двух шагов, пытающихся закодировать один и тот же контент.

Ответ 5

Чтобы избежать обратных косых черт, которые вызывают проблемы с данными JSON, я использую эту функцию.

//escape backslash to avoid errors
var escapeJSON = function(str) {
    return str.replace(/\\/g,'\\');
};

Ответ 6

если вы хотите избежать двойной кавычки в JSON, используйте \\, чтобы избежать ее.

Например, если вы хотите создать json из следующего объекта javascript

{time: '7 "o" clock'}

тогда вы должны написать следующим образом

'{"time":"7 \\"o\\" clock"}'

если мы проанализируем его с помощью JSON.parse()

JSON.parse('{"time":"7 \\"o\\" clock"}')

результат будет

{time: "7 "o" clock"}