使用 JSONPath 按名称过滤 json 个属性
Filter json properties by name using JSONPath
我想 select 所有元素与 属性 的名称中的特定匹配项。
例如这个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)
No,JSONPath 定义表达式遍历 JSON 文档以到达 JSON 的子集。如果您不知道确切的 属性 个名称,则无法使用它。
在您的情况下,您需要 属性 个名称以特定关键字开头的值。为此,您需要遍历整个 JSON 文本并查找以 pass 开头且类型为 string[=] 的 属性 名称18=]
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));
}
我想 select 所有元素与 属性 的名称中的特定匹配项。
例如这个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)
No,JSONPath 定义表达式遍历 JSON 文档以到达 JSON 的子集。如果您不知道确切的 属性 个名称,则无法使用它。
在您的情况下,您需要 属性 个名称以特定关键字开头的值。为此,您需要遍历整个 JSON 文本并查找以 pass 开头且类型为 string[=] 的 属性 名称18=]
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));
}