2014-02-25 113 views
2

可以說我有一個字符串,它看起來像這樣獲取文本之間的字符串文本中說串

{ 
    "_links": { 
    "next": "https://api.twitch.tv/kraken/users/test_user1/follows/channels?direction=DESC&limit=25&offset=25", 
    "self": "https://api.twitch.tv/kraken/users/test_user1/follows/channels?direction=DESC&limit=25&offset=0" 
    }, 
    "follows": [ 
    { 
     "created_at": "2013-06-02T09:38:45Z", 
     "_links": { 
     "self": "https://api.twitch.tv/kraken/users/test_user1/follows/channels/test_channel" 
     }, 
     "channel": { 
     "banner": null, 
     "_id": 1, 
     "url": "http://www.twitch.tv/test_channel", 
     "mature": null, 
     "teams": [ 

     ], 
     "status": null, 
     "logo": null, 
     "name": "test_channel", 
     "video_banner": null, 
     "display_name": "test_channel", 
     "created_at": "2007-05-22T10:37:47Z", 
     "delay": 0, 
     "game": null, 
     "_links": { 
      "stream_key": "https://api.twitch.tv/kraken/channels/test_channel/stream_key", 
      "self": "https://api.twitch.tv/kraken/channels/test_channel", 
      "videos": "https://api.twitch.tv/kraken/channels/test_channel/videos", 
      "commercial": "https://api.twitch.tv/kraken/channels/test_channel/commercial", 
      "chat": "https://api.twitch.tv/kraken/chat/test_channel", 
      "features": "https://api.twitch.tv/kraken/channels/test_channel/features" 
     }, 
     "updated_at": "2008-02-12T06:04:29Z", 
     "background": null 
     } 
    }, 
    ... 
    ] 
} 

通道的部分會具有不同的值「名稱」部分出現的次數X量。我將如何使用正則表達式或者沒有獲得上面代碼中「test_channel」值的「name」中的值。所有的時間,它出現,然後將其打印到一個文本框

我覺得我已經成功的唯一部分是正則表達式部分

string regex = @"(""name"":)\s+(\w+)(,""video_banner"")"; 
+7

這是json。使用json解析器而不是正則表達式。 –

+0

您正在尋找關於如何使用此正則表達式來查找文本字符串中的匹配的建議? –

回答

2

使用Json.Netthis site

var obj = JsonConvert.DeserializeObject<Krysvac.RootObject>(yourJsonString); 
foreach(var item in obj.follows) 
{ 
    Console.WriteLine(item.channel.name); 
} 

public class Krysvac 
{ 
    public class Links 
    { 
     public string next { get; set; } 
     public string self { get; set; } 
    } 

    public class Links2 
    { 
     public string self { get; set; } 
    } 

    public class Links3 
    { 
     public string stream_key { get; set; } 
     public string self { get; set; } 
     public string videos { get; set; } 
     public string commercial { get; set; } 
     public string chat { get; set; } 
     public string features { get; set; } 
    } 

    public class Channel 
    { 
     public object banner { get; set; } 
     public int _id { get; set; } 
     public string url { get; set; } 
     public object mature { get; set; } 
     public List<object> teams { get; set; } 
     public object status { get; set; } 
     public object logo { get; set; } 
     public string name { get; set; } 
     public object video_banner { get; set; } 
     public string display_name { get; set; } 
     public string created_at { get; set; } 
     public int delay { get; set; } 
     public object game { get; set; } 
     public Links3 _links { get; set; } 
     public string updated_at { get; set; } 
     public object background { get; set; } 
    } 

    public class Follow 
    { 
     public string created_at { get; set; } 
     public Links2 _links { get; set; } 
     public Channel channel { get; set; } 
    } 

    public class RootObject 
    { 
     public Links _links { get; set; } 
     public List<Follow> follows { get; set; } 
    } 
} 

如果您不想聲明這些類,則也可以使用dynamic關鍵字

dynamic obj = JsonConvert.DeserializeObject(yourJsonString); 
foreach(var item in obj.follows) 
{ 
    Console.WriteLine(item.channel.name); 
} 
0

如果你建立類,如使用json2csharp.com下,你會得到以下類的輸入字符串:

public class Links 
{ 
    public string next { get; set; } 
    public string self { get; set; } 
} 

public class Links2 
{ 
    public string self { get; set; } 
} 

public class Links3 
{ 
    public string stream_key { get; set; } 
    public string self { get; set; } 
    public string videos { get; set; } 
    public string commercial { get; set; } 
    public string chat { get; set; } 
    public string features { get; set; } 
} 

public class Channel 
{ 
    public object banner { get; set; } 
    public int _id { get; set; } 
    public string url { get; set; } 
    public object mature { get; set; } 
    public List<object> teams { get; set; } 
    public object status { get; set; } 
    public object logo { get; set; } 
    public string name { get; set; } 
    public object video_banner { get; set; } 
    public string display_name { get; set; } 
    public string created_at { get; set; } 
    public int delay { get; set; } 
    public object game { get; set; } 
    public Links3 _links { get; set; } 
    public string updated_at { get; set; } 
    public object background { get; set; } 
} 

public class Follow 
{ 
    public string created_at { get; set; } 
    public Links2 _links { get; set; } 
    public Channel channel { get; set; } 
} 

public class RootObject 
{ 
    public Links _links { get; set; } 
    public List<Follow> follows { get; set; } 
} 

現在,你只需要輸入JSON字符串反序列化RootObject類獲取所有name S IN使用稱爲Json.net

string json = "JSON STRING"; 
RootObject root = JsonConvert.DeserializeObject<RootObject>(json); 
List<string> names = root.follows.Select(follow => follow.channel.name).ToList(); 

foreach (string name in names) 
{ 
    txtBox += name + "; "; 
} 
+0

感謝您的幫助,但我解決了這個問題,感謝L.B – Krysvac

+0

的發帖,那麼如果它可以工作的話,您至少可以投下一個贊成票;)!謝謝! –

+0

那麼我需要15聲望,我沒有它 – Krysvac

0

好其他實用程序的輸入字符串,所以我得到了它的工作沒有W,但是,如果我用我的用戶名找回JSON,我得到一個巨大的代碼,你可以查看這裏一片:https://api.twitch.tv/kraken/users/krysvac/follows/channels

我folllow 31人,但是當我使用我的程序就可以用代碼

using (var w = new WebClient()) 
      { 
       string json_data = w.DownloadString("https://api.twitch.tv/kraken/users/" + input + "/follows/channels"); 

       dynamic obj = JsonConvert.DeserializeObject(json_data); 
       foreach (var item in obj.follows) 
       { 
        textBox1.AppendText(item.channel.name.ToString() + Environment.NewLine);          
       } 
      } 

我從我的31個人中的25個回到了文本框中,我不知道爲什麼,我試了一個人,應該返回超過100人,並有6人回來。

+0

您的API返回25個結果,使用'(int)obj._total'和'https://api.twitch.tv/ obj._links.next'獲得下一個結果鯤/用戶/ krysvac /如下/渠道?方向= DESC&limit = 25&offset = 25' –

+0

我仍然是c#的初學者,因此當我要求澄清你的意思時,請原諒我。 – Krysvac

+0

您的API以*塊(* 25個項目)返回結果。使用'(int)obj._total',你應該使用一個循環來獲取下一個項目(它的URL在'obj._links.next'中) –

相關問題