通过使用JSONPath名称筛选JSON性质(Filter json properties by n

2019-10-30 12:31发布

我想选择与该属性的名称一定匹配的所有元素。

例如,所有的名字属性开始与此JSON“通行证”:

{
  "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的

Answer 1:

,JSONPath限定表达式通过JSON文档遍历以达到到JSON的子集。 它不能被用来当你不知道确切的属性名称。

在你的情况,你需要的属性值,其名称与特定的关键字开始。 对于这一点,你需要遍历整个JSON文本,并查找其与具有字符串类型 开始的属性名称

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));
}


文章来源: Filter json properties by name using JSONPath