如何获取另一个字符串中的字符串之间的特定字符串?

时间:2017-07-19 07:48:39

标签: c# api text split substring

我遇到了类似这样的问题:

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

这是我从网站获得的API(抱歉,我无法告诉链接),我想从那块文本中获取的只是获取类别和id字符串,是否可以做到所以不用正则表达式? (我真的很糟糕)

我需要的输出示例(在string []数组中):

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);
}

该代码为我提供了#34;之间的文字。 " animal_zone":"和" ]":

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

但我仍然不知道如何将0001和0002放在一个字符串数组[]

或者有没有更好的方法从API网站获取信息而不是通过逐个获取所有文本和子串/拆分来实现?

请帮帮我。谢谢

3 个答案:

答案 0 :(得分:0)

您应该创建课程(如果您不知道应该如何上课,请使用json2sharp):

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

并使用JSON.NET

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

答案 1 :(得分: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()));

这是一般的想法。

答案 2 :(得分: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选择您的区域