Как обработать эту строку в JSON? - PullRequest
0 голосов
/ 31 мая 2010

Я храню значение многострочного текстового поля в моей таблице базы данных ... Когда я конвертировал это значение в json, это выдает ошибку Error: unterminated string literal ...

Мой пример данных был

Адрес многострочного текстового поля http://img249.imageshack.us/img249/9136/addressi.jpg

Я извлекаю строку в таблицу данных, а затем преобразую ее в json,

public string GetJSONString(DataTable table)
    {
        StringBuilder headStrBuilder = new StringBuilder(table.Columns.Count * 5); 
        for (int i = 0; i < table.Columns.Count; i++)
        {
            headStrBuilder.AppendFormat("\"{0}\" : \"{0}{1}¾\",", table.Columns[i].Caption, i);
        }
        headStrBuilder.Remove(headStrBuilder.Length - 1, 1);     
        StringBuilder sb = new StringBuilder(table.Rows.Count * 5); 
        sb.Append("{\"");
        sb.Append(table.TableName);
        sb.Append("\" : [");
        for (int i = 0; i < table.Rows.Count; i++)
        {
            string tempStr = headStrBuilder.ToString();
            sb.Append("{");
            for (int j = 0; j < table.Columns.Count; j++)
            {
                table.Rows[i][j] = table.Rows[i][j].ToString().Replace("'", "");
                tempStr = tempStr.Replace(table.Columns[j] + j.ToString() + "¾", table.Rows[i][j].ToString());
            }
            sb.Append(tempStr + "},");
        }
        sb.Remove(sb.Length - 1, 1); // trim last ,
        sb.Append("]}");
        return sb.ToString();
    }

Вышеупомянутый метод, кажется, не обрабатывает символ новой строки ... Любое предложение ...

Ответы [ 2 ]

2 голосов
/ 31 мая 2010

Строки JSON не могут содержать буквальный перевод строки (ASCII 10). Он должен быть закодирован как «\», а затем «n». Как говорит Игнасио, вам следует использовать одну из множества библиотек JSON.

JSON.NET имеет встроенную поддержку для сериализации DataTables и других типов.

0 голосов
/ 31 мая 2010

Если вы не хотите оставаться в стороне от сторонних библиотек, вы также можете использовать .NET встроенный сериализатор

System.Web.Script.Serialization.JavaScriptSerializer

Вот код, в котором не хватает многих проверок, который превращает DataTable в JSON

 ArrayList list = new ArrayList();
            Dictionary<string, object> jsonOutput = new Dictionary<string, object>();

            foreach (DataRow row in table.Rows)
            {
                foreach (DataColumn col in row.Table.Columns)
                {
                    if (row[col] == DBNull.Value)
                        jsonOutput.Add(col.ColumnName, "");
                    else
                        jsonOutput.Add(col.ColumnName, row[col]);
                }

                list.Add(jsonOutput);
                jsonOutput = new Dictionary<string, object>();
            }


            System.Web.Script.Serialization.JavaScriptSerializer jss = new System.Web.Script.Serialization.JavaScriptSerializer();
            return jss.Serialize(list);
...