2013-10-30 25 views
0

我有一個JSON string,我需要使它更好在C#。我試圖將代碼從這裏: JSON formatter in C#?C#中的JSON格式#

這是一類我在項目中使用:

class JsonHelper 
{ 
    private const string INDENT_STRING = " "; 
    public static string FormatJson(string str) 
    { 
    var indent = 0; 
    var quoted = false; 
    var sb = new StringBuilder(); 
    for (var i = 0; i < str.Length; i++) 
    { 
     var ch = str[i]; 
     switch (ch) 
     { 
     case '{': 
     case '[': 
     sb.Append(ch); 
     if (!quoted) 
     { 
     sb.AppendLine(); 
     Enumerable.Range(0, ++indent).ForEach(item => sb.Append(INDENT_STRING)); 
     } 
     break; 
     case '}': 
     case ']': 
     if (!quoted) 
     { 
      sb.AppendLine(); 
     Enumerable.Range(0, --indent).ForEach(item => sb.Append(INDENT_STRING)); 
     } 
     sb.Append(ch); 
     break; 
     case '"': 
     sb.Append(ch); 
     bool escaped = false; 
     var index = i; 
     while (index > 0 && str[--index] == '\\') 
      escaped = !escaped; 
     if (!escaped) 
      quoted = !quoted; 
     break; 
     case ',': 
     sb.Append(ch); 
     if (!quoted) 
     { 
     sb.AppendLine(); 
     Enumerable.Range(0, indent).ForEach(item => sb.Append(INDENT_STRING)); 
     } 
     break; 
     case ':': 
     sb.Append(ch); 
     if (!quoted) 
      sb.Append(" "); 
     break; 
     default: 
     sb.Append(ch); 
     break; 
     } 
    } 
    return sb.ToString(); 
    } 
} 

static class Extensions 
{ 
    public static void ForEach<T>(this IEnumerable<T> ie, Action<T> action) 
    { 
    foreach (var i in ie) 
    { 
     action(i); 
    } 
    } 
} 

,並在我的網頁我有這樣的代碼來調用類,並在屏幕上書寫的字符串。

IRestResponse response5 = GetCampaigns(); 
string formattedJason = JsonHelper.FormatJson(response5.Content.ToString()); 
Response.Write(formattedJason); 

我的問題是,格式化的Json可是沒有一個換行符所以它是這樣的:

{ "total_count": 10, "items": [ { "clicked_count": 2559, "opened_count":  7021, "submitted_count": 3102, "unsubscribed_count": 0, "bounced_count": 4, "id": "3", "name": "Approved Email", "created_at": "Wed, 09 Oct 2013 17:16:35 GMT", "delivered_count": 2984, "complained_count": 0, "dropped_count": 118 }, { "clicked_count": 240, "opened_count": 434, "submitted_count": 183, "unsubscribed_count": 0, "bounced_count": 0, "id": "5", "name": "Ready to Shop", "created_at": "Wed, 09 Oct 2013 00:21:08 GMT", "delivered_count": 181, "complained_count": 0, "dropped_count": 2 } ] } 

我怎樣才能得到一個更好的Json是這樣的:

{ 
"status" : "OK", 
"results" : [ 
    { 
     "types" : [ 
      "locality", 
      "political" 
     ], 
     "formatted_address" : "New York, NY, USA", 
     "address_components" : [ 
      { 
       "long_name" : "New York", 
       "short_name" : "New York", 
       "types" : [ 
        "locality", 
        "political" 
       ] 
      }, 
+10

我建議使用[JSON.Net](http://james.newtonking.com/json),這會讓你的生活變得更輕鬆! – JMK

+1

難道你不能只在你的格式化代碼中添加'''',''和'','?哦,兩個括號的結尾。 –

+0

我試圖使用它我從Nuget安裝它,但由於某種原因,我不知道爲什麼當我使用Newtonsoft.Json;在頁面的頂部,它給了我這個錯誤:\t「無法找到類型或名稱空間名稱'Newtonsoft'(您是否缺少使用指令或程序集引用?」) – Alma

回答

0

你可以將文本寫入記事本++,並使用JSMin插件來格式化json字符串。或者JSON.Net是你的解決方案。