子字符串继续搜索直到指定字符

本文关键字:字符 字符串 继续 搜索 | 更新日期: 2023-09-27 18:05:29

我在运行时得到一个字符串。字符串为JSON格式(键值对)。其中一个关键是"userId"。我需要检索userId的值。问题是我不知道"userId"键的位置。字符串可以是{"name":"XX", "userId":"YYY","age":"10"}或者{"age":"10", "name":"XX", "userId":"YYY"}或者{"age":"10"}

我正在考虑使用substring()

var index = myString.IndexOf("userId'":'"");
if(index != -1){
  myString.Subtring(index, ???)//How to specify the length here
}

我不确定,怎么说继续,直到你找到下一个"(双引号)

子字符串继续搜索直到指定字符

如果只计划使用userId属性,您可以简单地声明一个具有userId成员的对象并反序列化json。任何其他属性将在反序列化过程中被省略。

class UserIDObj
{
   public string UserId { get; set; }
}
var obj = JsonConvert.DeserializeObject<UserIDObj>("{'"name'":'"XX'", '"userId'":'"YYY'",'"age'":'"10'"}");
string usrID = obj.UserId;

@Wiktor Stribiżew给出的答案也很有魅力。我在粘贴它的溶液。

System.Text.RegularExpressions.Regex.Match(myString, "'"userId'":'"([^'"]+)").Groups[1].Value

你可以这样做:

var needle = "'"userId'":"; // also you forgot to escape the quote here
var index = myString.IndexOf(needle); 
if(index != -1){
  var afterTheUserId = myString.Substring(index + needle.Length);
  var quoteIndex = afterTheUserId.IndexOf('"');
  // do what you want with quoteIndex
}

但正如Eric Philips和PhonicUK所说,您应该使用适当的JSON解析器,而不是编写自己的字符串函数。