C# 子字符串继续搜索,直到指定字符
我在运行时得到一个字符串。字符串为JSON格式(键值对)。其中一个键是“C# 子字符串继续搜索,直到指定字符,c#,.net,string,linq,substring,C#,.net,String,Linq,Substring,我在运行时得到一个字符串。字符串为JSON格式(键值对)。其中一个键是“userId”。我需要检索userId的值。问题是我不知道“userId”键的位置。字符串可以像{“name”:“XX”,“userId”:“YYY”,“age”:“10”}或者它可以像{“age”:“10”,“name”:“XX”,“userId”:“YYY”}或者它可以像这样{“age”:“10”} 我正在考虑使用substring() 我不确定,在找到下一个之前,如何说继续“(双引号)您可以这样做: var needl
userId
”。我需要检索userId
的值。问题是我不知道“userId
”键的位置。字符串可以像{“name”:“XX”,“userId”:“YYY”,“age”:“10”}
或者它可以像{“age”:“10”,“name”:“XX”,“userId”:“YYY”}
或者它可以像这样{“age”:“10”}
我正在考虑使用substring()
我不确定,在找到下一个之前,如何说继续“
(双引号)您可以这样做:
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解析器,而不是编写自己的字符串函数。如果只计划使用
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;
类UserIDObj
{
公共字符串用户标识{get;set;}
}
var obj=JsonConvert.DeserializeObject(“{\'name\':\'XX\',\'userId\':\'YYY\',\'age\':\'10\'”);
字符串usrID=obj.UserId;
由@Wiktor Stribiżew给出的答案也很有效。我正在粘贴他的解决方案
System.Text.RegularExpressions.Regex.Match(myString,“\”userId\“:\”([^\“]+)”)组[1].Value
为什么不反序列化JSON而不是重新发明轮子?使用合适的JSON解析器并实际读取数据。不要尝试自己用字符串函数来解析它。@ErikPhilips:我想取消JSON的序列化,但字符串的格式是不固定的。我同意其他评论,尝试这样做是荒谬的自己编写一个简化的JSON解析器。只需正确地编写并使用现有的工具。也就是说,您发布的一小段代码表明您知道使用string.IndexOf()
方法查找文本“userId:”
。如果您知道这一点,为什么不知道使用?@PeterDuniho:谢谢。我明白你的意思。我不能使用myString.Substring(index+pine.Length)代码>。正如我所说,我不确定JSON输入。键的顺序和键的名称不是固定的。为什么不能使用myString.Substring(index+pine.Length)代码>?@OpenStack:JSON不要求键/值对以任何特定顺序排列。我不明白为什么我的答案被否决,我的意思是我同意这显然不是解析OP的JSON代码的好方法,但我正在回答这个问题。
class UserIDObj
{
public string UserId { get; set; }
}
var obj = JsonConvert.DeserializeObject<UserIDObj>("{\"name\":\"XX\", \"userId\":\"YYY\",\"age\":\"10\"}");
string usrID = obj.UserId;