2017-07-19 63 views
1

我得到的是这样一个问题:如何获取另一个字符串内的字符串之间的特定字符串?

{ 
    "animal_zone":[ 
    { 
     "id":0001 
    }, 
    { 
     "id":0002 
    } 
    ] 
} 

这是我从网站上下载(抱歉,我不能告诉链接)的API,我从文字的那一块希望是只得到类别和ID字符串,是否有可能这样做,而不做正则表达式? (我真的很糟糕吧)

,我需要(字符串[]数组内)

输出例如:

animal_zone 
0001 
0002 

我曾尝试:

private void MClient_DownloadDataCompleted(object sender, DownloadDataCompletedEventArgs e){ 
    string webResult = Encoding.UTF8.GetString(e.Result); 
    int goFrom = webResult.IndexOf("\"animal_zone\": [") + "\"animal_zone\": [".Length; 
    int goTo = webResult.IndexOf("]"); 
    string pveResult = webResult.Substring(goFrom, goTo - goFrom); 
} 

该代码得到我之间“‘animal_zone’的文字:”和“]”:

{ 
    "id":0001 
}, 
{ 
    "id":0002 
} 

但我仍然不知道如何让0001和技术一起内一个字符串[]

或者有更好的方法从API网站获取信息,而不是通过获取所有文本和子字符串/将其一个一个地分割出来吗?

请帮帮我。谢谢

+1

这是JSON,只需反序列化该响应。不需要RegEx或子字符串。 – jAC

+0

准备模型类并根据该类反序列化基于该类的JSON字符串,以便它可以读取“id”属性值。 –

+0

[将反序列化JSON转换为C#动态对象?](https://stackoverflow.com/questions/3142495/deserialize-json-into-c-sharp-dynamic-object) – jAC

回答

0

您应该创建类(使用json2sharp如果你不知道应该如何看类):

public class AnimalZone 
{ 
    public int id { get; set; } 
} 

,并使用JSON.NET

List<AnimalZone> idList= JsonConvert.DeserializeObject<List<AnimalZone>>(yourJson); 
+0

谢谢,JSON的东西解决了它:) man ..小时的子字符串..事实证明,这样做有一个更好,更简单,更快捷的方式 –

0

这是常见的东西,只是使用图书馆。顺便说一下,这种格式被称为JSON。 http://www.newtonsoft.com/json

你想要做的就是原生的C#类,你可以使用这个映射到什么:

public class AnimalStuff 
    { 
     public List<Ids> animal_zone { get; set; } 
    } 

    public class Ids 
    { 
     public int Id { get; set; } 
    } 

我的意思是,例如有页面,但无论如何顶部:

AnimalStuff animalstuff = JsonConvert.DeserializeObject<AnimalStuff>(yourJsonString); 

    string[] answer = { "animal_zone" }; 
    answer.Concat(animalstuff.animal_zone.Select(a=>a.ToString())); 

这是一般的想法。

0

这里完全工作代码示例

的POCO

public class AnimalZone 
    { 
     public int id { get; set; } 
    } 

    public class AnimalZones 
    { 
     public List<AnimalZone> animal_zone { get; set; } 
    } 

您如何反序列化

var animals= JsonConvert.DeserializeObject<AnimalZones>(txt); 

然后使用LINQ来选择区域

相关问题