How do I handle newlines in JSON?
I guess this is what you want:
var data = '{"count" : 1, "stack" : "sometext\\n\\n"}';
(You need to escape the "\" in your string (turning it into a double-"\"), otherwise it will become a newline in the JSON source, not the JSON data.)
You will need to have a function which replaces \n
to \\n
in case data
is not a string literal.
function jsonEscape(str) {
return str.replace(/\n/g, "\\\\n").replace(/\r/g, "\\\\r").replace(/\t/g, "\\\\t");
}
var data = '{"count" : 1, "stack" : "sometext\n\n"}';
var dataObj = JSON.parse(jsonEscape(data));
Resulting dataObj
will be
Object {count: 1, stack: "sometext\n\n"}
According to the specification, http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-404.pdf:
A string is a sequence of Unicode code points wrapped with quotation marks (
U+0022
). All characters may be placed within the quotation marks except for the characters that must be escaped: quotation mark (U+0022
), reverse solidus (U+005C
), and the control charactersU+0000
toU+001F
. There are two-character escape sequence representations of some characters.
So you can't pass 0x0A
or 0x0C
codes directly. It is forbidden! The specification suggests to use escape sequences for some well-defined codes from U+0000
to U+001F
:
\f
represents the form feed character (U+000C
).\n
represents the line feed character (U+000A
).
As most of programming languages uses \
for quoting, you should escape the escape syntax (double-escape - once for language/platform, once for JSON itself):
jsonStr = "{ \"name\": \"Multi\\nline.\" }";