Как получить значение определенного поля из токена JSON, используя C#? - PullRequest
0 голосов
/ 26 мая 2020

У меня есть следующий JSON, который я проанализировал в «токен» JToken.

{
  "base": {
    "employees": {
      "employeewage": {
        "employeeids": [
          {
            "employeeid": "AA",
            "details": [
              {
                "position": "Tester",
                "salary": 8500,
                "currency": "INR"
              }
            ]
          }
        ]
      }
    }
  }
}

Мне нужно получить только значение поля «зарплата». Код, который я пробовал,

var salary = token.SelectToken("$.base.employees.employeewage.employeeids.details.salary").ToString();

. Я получаю исключение. Любая помощь будет полезна.

Ответы [ 2 ]

2 голосов
/ 26 мая 2020

Как @ Pavel Anikhouski сказал в комментариях, у вас есть массивы (employeeids и details) в вашем json, поэтому вам нужно добавить обработку массивов в путь:

var x= @"{
  'base': {
    'employees': {
            'employeewage': {
                'employeeids': [
                  {
            'employeeid': 'AA',
                    'details': [
                      {
                'position': 'Tester',
                        'salary': 8500,
                        'currency': 'INR'
              }
            ]
          }
        ]
      }
    }
  }
}";

var salary = JToken.Parse(x)
    .SelectToken("$.base.employees.employeewage.employeeids[0].details[0].salary")
    .ToString();

См. Также примеры в Newtonsoft docs .

2 голосов
/ 26 мая 2020

employeeids и details - это массивы, поэтому вы должны отразить их и перечислить после анализа

var json = JObject.Parse(jsonString);
var employees = json["base"]?["employees"]?["employeewage"]?["employeeids"];

foreach (var detail in employees.SelectMany(e => e["details"]))
{
    var salary = detail["salary"]?.Value<string>();
}

Или получить первый элемент из всех details от всех сотрудников

var salary = employees.SelectMany(e => e["details"]).FirstOrDefault()?["salary"]?.Value<string>();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...