C# 在所述字符串中的文本之间获取字符串中的文本
假设我有一个像这样的字符串C# 在所述字符串中的文本之间获取字符串中的文本,c#,regex,json,string,text,C#,Regex,Json,String,Text,假设我有一个像这样的字符串 { "_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
{
"_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次,且“名称”部分具有不同的值。我如何使用regex或不使用regex获取上面代码中“name”中的值“test_channel”。它出现的所有时间,然后将其打印到文本框中
我想我唯一能做到的就是正则表达式部分
string regex = @"(""name"":)\s+(\w+)(,""video_banner"")";
使用及
如果使用以下方法为输入字符串构建类,则将获得以下类:
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,我会得到一大块代码,您可以在这里查看: 我跟踪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人返回了文本框。这是json。使用json解析器而不是正则表达式。您正在寻找关于如何使用此正则表达式在文本字符串中查找匹配项的建议?谢谢您的帮助,但我解决了它,这要感谢L的帖子。b如果有效,您至少可以投上一票;)!谢谢好吧,我需要15个名声,我不担心!我对你的问题投了更高的票,所以现在你有+5!a) 我打算
类
而不是名称空间。所以这是正确的。请将其作为评论发布,而不是编辑。b) root.follows。选择(…)
返回IEnumerable
非列表
。添加ToList()
就足够了,但在发布之前似乎还没有测试过代码。c) 在大约40分钟后重复我的答案有什么意义?您的API返回25个结果,要获得下一个结果,请使用(int)obj.\u总计
和obj.\u链接。下一个
是https://api.twitch.tv/kraken/users/krysvac/follows/channels?direction=DESC&limit=25&offset=25
我仍然是c#的初学者,所以请原谅我要求澄清您的意思。您的API以块的形式返回结果(每个请求25项)。使用(int)obj.\u total
您应该使用循环来获取下一个项目(其url位于obj.\u links.next
)
dynamic obj = JsonConvert.DeserializeObject(yourJsonString);
foreach(var item in obj.follows)
{
Console.WriteLine(item.channel.name);
}
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; }
}
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 + "; ";
}
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);
}
}