我正在尝试编写一种方法,该方法将采用以下JSON结构,并为所有其中路径包含字符串的所有路径返回路径属性。因此,在这种情况下,如果我调用GetPath(json,“ User1”),我想获取[“ User1 \ path1”,“ User1 \ path2”]
[
{
"id":90BCV,
"name":"Path 1",
"path":"User1\\path 1"
},
{
"id":90BC,
"name":"Path 2",
"path":"User1\\path 2"
},
{
"id":91AB,
"name":"Path 3",
"path":"User2\\path 3"
}
]
public static List<string> GetPath(string json, string key)
{
JArray reader = JArray.Parse(json);
List<JToken> paths = reader.SelectTokens("$.[?(@.path=~@'" + key + "')]").ToList();
List<string> returnList = new List<string>();
foreach (JToken path in paths)
{
returnList.Add((string)path["path"]);
}
return returnList;
}
我尝试了多种不同的正则表达式方法,但似乎无法正确执行此查询。大多数时候,我最终会得到一个空列表或无效的正则表达式错误。
答案 0 :(得分:1)
可行
static string json = @"
[
{
""id"":""90BCV"",
""name"":""Path 1"",
""path"":""User1\\path 1""
},
{
""id"":""90BC"",
""name"":""Path 2"",
""path"":""User1path 2""
},
{
""id"":""91AB"",
""name"":""Path 3"",
""path"":""User2\\path 3""
}
]
";
static void Main(string[] args)
{
string key = "User2\\\\path 3";
JArray reader = JArray.Parse(json);
List<JToken> paths = reader.SelectTokens("$.[?(@.path=='" + key + "')]").ToList();
}
那里几乎没有东西 -==,而不仅仅是=,因为JPath使用代码内编译器,所以您遵循C#约定。 -出于同样的原因,您需要\\代表\
答案 1 :(得分:1)
我不知道您为什么要采用这种方法。我宁愿使用.ToString()然后在.foreach循环中使用.Contains。
Key
答案 2 :(得分:1)
顺便说一句,如果您真的想做正则表达式的话,那就对了:
List<JToken> paths = reader.SelectTokens("$.[?(@.path=~/^" + key + "$/)]").ToList();