@ivandao

Как с помощью jsonpath извлечь из массива объектов значение одного свойства зная значение другого?

var cities = [
  { name: "London", "population": 8615246 },
  { name: "Berlin", "population": 3517424 },
  { name: "Madrid", "population": 3165235 },
  { name: "Rome",   "population": 2870528 }
];

var jp = jsonpath; //  для краткости
var names = jp.query(cities, '$..name');
console.log(names); // [ "London", "Berlin", "Madrid", "Rome" ]

Как получить название города, население которого равно 2870528?
  • Вопрос задан
  • 627 просмотров
Решения вопроса 2
0xD34F
@0xD34F Куратор тега JavaScript
Что знаем и что хотим узнать:

const sourceKey = 'population';
const sourceVal = 2870528;
const targetKey = 'name';

Узнаём:

const [ val ] = jp.query(cities, `$[?(@.${sourceKey} == ${sourceVal})].${targetKey}`);

Одно непонятно - зачем тут jsonpath? Без него проще:

const val = (cities.find(n => n[sourceKey] === sourceVal) || {})[targetKey];
Ответ написан
Комментировать
sergiks
@sergiks Куратор тега JavaScript
♬♬
$[?(@.population == 2870528)].name

Попробовать можно на jsonpath.com
скрин
5d2f068690488541075820.png


См. язык запросов. Фильтр ?( условие )
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
@alekssamos
Программист любитель
Может быть как-нибудь так? '["population"=2870528]'
Ответ написан
Комментировать
@Roman-Fov
Json
{
  "cities": [
      { "name": "London", "population": 8615246 },
      { "name": "Berlin", "population": 3517424 },
      { "name": "Madrid", "population": 3165235 },
      { "name": "Rome",   "population": 2870528 }
  ]
}

Query
$.cities[?(@.population == 8615246)] }
Result
[
  {
    "name": "London",
    "population": 8615246
  }
]


Оно?
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы