Фильтруйте свойства json по имени, используя JSONPath - PullRequest
0 голосов
/ 25 сентября 2018

Я бы хотел выбрать все элементы с определенным соответствием в имени свойства.

Например, все свойства, имя которых начинается с 'pass' из этого 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

1 Ответ

0 голосов
/ 25 сентября 2018

Нет , 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));
}
...