Как я обрабатываю новые строки в JSON?

Я генерировал некоторый 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 сбой.

263
задан vaxquis 26 September 2019 в 11:08
поделиться

2 ответа

Я предполагаю, что это - то, что Вы хотите:

var data = '{"count" : 1, "stack" : "sometext\\n\\n"}';

(Необходимо выйти "\" в строке (превращение его в двойное - "\"), иначе это станет новой строкой в источнике JSON, не данных JSON.)

338
ответ дан BlaM 23 November 2019 в 02:33
поделиться

Вы можете изучить эту функцию 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(); 
} 
1
ответ дан 23 November 2019 в 02:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: