json - 使用 JSONPath 按名称过滤 json 属性
问题描述
我想选择属性名称中具有特定匹配的所有元素。
例如,此 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吗?
我正在使用SelectTokens(string path)
Newtonsoft.Json.Linq的方法
解决方案
不,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));
}
推荐阅读
- scrapy - 用 Scrapy 抓取 Airbnb,只需获取一个页面的标题
- html - 如果数字不同,我想通过此按钮添加显示弹出窗口不相等
- firebase - 使用 Github Desktop 将 firebase 功能放到 Github
- macos - 如何在 vim 中存储 golang 模板宏
- python-3.x - 未显示图像文件,但正确获取了 url 位置,我在命令行中也出现类型错误
- java - HTTP 状态 500 - 内部服务器错误 - 服务器遇到阻止其完成请求的意外情况
- gatsby - 使用和不使用 html.js 渲染 Gatsby 页面
- jquery - 将主函数值获取到剑道网格读取函数中
- apache - 408 请求超时,Apache
- php - 如何解决这个php关联数组推送