2014-02-25 75 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'中) –

相关问题