2010-05-31 58 views
0

我在我的數據庫表中存儲多行文本框的值...當我轉換此值,以JSON它給了我一個錯誤Error: unterminated string literal ...如何在json中處理這個字符串?

我的樣本數據是,

Address Multiline textbox 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(); 
    } 

以上方法doen't似乎處理換行符...任何建議...

+5

爲什麼OH爲什麼你用手生成JSON?!?! – 2010-05-31 04:35:46

回答

2

JSON字符串不能包含文字換行符(ASCII 10)。它必須被編碼爲'\',然後'n'。正如Ignacio所說的,您應該使用許多JSON庫中的一個。

JSON.NET有built-in support序列化DataTables和其他類型。

0

如果你wan't遠離第三方庫的時候,你也可以使用.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);