我想选择属性名称中具有特定匹配项的所有元素。
例如,此json中所有名称以'pass'开头的属性:
{
"firstName": "John",
"lastName" : "doe",
"age" : 50,
"password" : "1234",
"phoneNumbers": [
{
"type" : "iPhone",
"number": "0123-4567-8888",
"password": "abcd"
},
{
"type" : "home",
"number": "0123-4567-8910",
"password": "fghi"
}
]
}
会产生类似这样的结果:
[
"1234",
"abcd",
"fghi"
]
我不想按值过滤,而只按属性名称过滤。可以使用jsonpath吗?
我正在使用Newtonsoft.Json.Linq的方法SelectTokens(string path)
答案 0 :(得分:2)
否,JSONPath定义了要遍历JSON文档以到达JSON子集的表达式。如果您不知道确切的属性名称,则无法使用它。
在您的情况下,您需要名称以特定关键字开头的属性值。为此,您需要遍历整个JSON文本并查找以 pass 开头且具有字符串类型
的属性名称var passwordList = new List<string>();
using (var reader = new JsonTextReader(new StringReader(jsonText)))
{
while (reader.Read())
{
if(reader.TokenType.ToString().Equals("PropertyName")
&& reader.ValueType.ToString().Equals("System.String")
&& reader.Value.ToString().StartsWith("pass"))
{
reader.Read();
passwordList.Add(reader.Value.ToString());
}
}
passwordList.ForEach(i => Console.Write("{0}\n", i));
}