Я сгенерировал немного JSON и пытаюсь превратить его в объект в JavaScript. Я продолжаю получать ошибки. Вот что у меня есть:
var data = '{"count" : 1, "stack" : "sometext\n\n"}';
var dataObj = eval('('+data+')');
Это дает мне ошибку:
unterminated string literal
С JSON.parse(data)
, я вижу похожие сообщения об ошибках: " Unexpected token ↵
" в Chrome и " unterminated string literal
" в Firefox и IE.
Когда я вынимаю \n
после того, sometext
как ошибка уходит в обоих случаях. Я не могу понять, почему \n
делает eval
и JSON.parse
терпит неудачу.
javascript
json
newline
Полярный медведь
источник
источник
Ответы:
Я думаю, это то, что вы хотите:
(Вам нужно экранировать «\» в вашей строке (превратив его в двойное - «\»), иначе он станет новой строкой в источнике JSON, а не данными JSON.)
источник
Вам понадобится функция, которая заменяет
\n
на\\n
случай,data
если строковый литерал не является.Итог
dataObj
будетисточник
.replace("\\n", "\\\\n")
), и я бы также предложил использовать регулярные выражения, чтобы разрешить замену нескольких экземпляров (то есть.replace(/\n/g, "\\\\n")
).replace("\n", "\\n")
должно хорошо делать работу! Например,var test = [{"description":"Some description about the product. This can be multi-line text."}]; console.log(JSON.parse(test.replace(/\n/g, "\\n")));
объект консоли будет отлично выводиться на консоль браузера как[{"description":"Some description about the product.\nThis can be multi-line text."}]
\n
.eval
функцию. 17 голосов ???Согласно спецификации, http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf :
Так что вы не можете передать
0x0A
или0x0C
кодировать напрямую. Запрещено! Спецификация предлагает использовать escape-последовательности для некоторых четко определенных кодов отU+0000
доU+001F
:\f
представляет символ перевода формы (U+000C
).\n
представляет символ перевода строки (U+000A
).Поскольку большинство языков программирования использует
\
для цитирования, вы должны избегать синтаксиса escape (double-escape - один раз для языка / платформы, один раз для самого JSON):источник
Вы можете просто экранировать свою строку на сервере, когда записываете значение поля JSON, и удалять его при извлечении, например, в браузере клиента.
Реализация JavaScript всех основных браузеров имеет команду unescape.
Пример:
На сервере:
В браузере:
источник
Возможно, вы захотите заглянуть в эту функцию C #, чтобы экранировать строку:
http://www.aspcode.net/C-encode-a-string-for-JSON-JavaScript.aspx
источник
>
?Я использовал эту функцию для удаления новой строки или других символов в данных для анализа данных JSON:
источник
JSON.stringify
конвертирует приведенную выше строку в
как упомянуто здесь
JSON Stringify
источник
Я столкнулся с этой проблемой при создании класса в PHP 4 для эмуляции json_encode (доступно в PHP 5). Вот что я придумал:
Я следовал правилам, упомянутым здесь . Я использовал только то, что мне было нужно, но я думаю, что вы можете адаптировать его к вашим потребностям на языке, который вы используете. Проблема в моем случае была не в новых строках, как я изначально думал, а в том, что / не удалось избежать. Я надеюсь, что это предотвратит кого-то еще от маленькой головной боли, которую я поняла, чтобы понять, что я сделала неправильно
источник
Как я вас понимаю вопрос, речь идет не о разборе JSON , потому что вы можете скопировать и вставить свой JSON в код напрямую - так что если это так , то просто скопировать ваш JSON непосредственно к
dataObj
переменной без упаковки его в одинарные кавычки (подсказка:eval==evil
)источник