Я генерировал некоторый 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
сбой.
Я предполагаю, что это - то, что Вы хотите:
var data = '{"count" : 1, "stack" : "sometext\\n\\n"}';
(Необходимо выйти "\" в строке (превращение его в двойное - "\"), иначе это станет новой строкой в источнике JSON, не данных JSON.)
Вы можете изучить эту функцию C #, чтобы избежать строки:
http://www.aspcode.net/C-encode-a-string-for-JSON-JavaScript .aspx
public static string Enquote(string s)
{
if (s == null || s.Length == 0)
{
return "\"\"";
}
char c;
int i;
int len = s.Length;
StringBuilder sb = new StringBuilder(len + 4);
string t;
sb.Append('"');
for (i = 0; i < len; i += 1)
{
c = s[i];
if ((c == '\\') || (c == '"') || (c == '>'))
{
sb.Append('\\');
sb.Append(c);
}
else if (c == '\b')
sb.Append("\\b");
else if (c == '\t')
sb.Append("\\t");
else if (c == '\n')
sb.Append("\\n");
else if (c == '\f')
sb.Append("\\f");
else if (c == '\r')
sb.Append("\\r");
else
{
if (c < ' ')
{
//t = "000" + Integer.toHexString(c);
string t = new string(c,1);
t = "000" + int.Parse(tmp,System.Globalization.NumberStyles.HexNumber);
sb.Append("\\u" + t.Substring(t.Length - 4));
}
else
{
sb.Append(c);
}
}
}
sb.Append('"');
return sb.ToString();
}