2015-03-25 7 views
4

Учитывая массив JSON объектов, таким образом:Извлечение выбранных свойств из вложенного объекта JSON с JQ

[ 
    { 
    "geometry": { 
     "type": "Polygon", 
     "coordinates": [[[-69.9969376289999, 12.577582098000036]]] 
    }, 
    "type": "Feature", 
    "properties": { 
     "NAME": "Aruba", 
     "WB_A2": "AW", 
     "INCOME_GRP": "2. High income: nonOECD", 
     "SOV_A3": "NL1", 
     "CONTINENT": "North America", 
     "NOTE_ADM0": "Neth.", 
     "BRK_A3": "ABW", 
     "TYPE": "Country", 
     "NAME_LONG": "Aruba" 
    } 
    }, 
    { 
    "geometry": { 
     "type": "MultiPolygon", 
     "coordinates": [[[-63.037668423999946, 18.212958075000028]]] 
    }, 
    "type": "Feature", 
    "properties": { 
     "NAME": "Anguilla", 
     "WB_A2": "-99", 
     "INCOME_GRP": "3. Upper middle income", 
     "SOV_A3": "GB1", 
     "NOTE_ADM0": "U.K.", 
     "BRK_A3": "AIA", 
     "TYPE": "Dependency", 
     "NAME_LONG": "Anguilla" 
    } 
    } 
] 

Я хотел бы извлечь подмножество ключевых/значений из вложенного properties, в то время сохраняя другие свойства от внешнего объекта неповрежденной, производя что-то вроде:

[ 
    { 
    "geometry": { 
     "type": "Polygon", 
     "coordinates": [[[-69.9969376289999, 12.577582098000036]]] 
    }, 
    "type": "Feature", 
    "properties": { 
     "NAME": "Aruba", 
     "NAME_LONG": "Aruba" 
    } 
    }, 
    { 
    "geometry": { 
     "type": "MultiPolygon", 
     "coordinates": [[[-63.037668423999946, 18.212958075000028]]] 
    }, 
    "type": "Feature", 
    "properties": { 
     "NAME": "Anguilla", 
     "NAME_LONG": "Anguilla" 
    } 
    } 
] 

т.е. удалить все ключи, кроме NAME и NAME_LONG.

Я уверен, что с jq должен быть достаточно простой способ достижения этого. Помогите оценить.

ответ

5

Вы можете использовать этот фильтр:

map(
    .properties |= with_entries(select(.key == ("NAME", "NAME_LONG"))) 
) 

Это отображает каждый элемент в массиве, где объект properties фильтруется, чтобы включать только NAME и NAME_LONG свойства.

+0

Проверено на https://jqplay.org/, приятно! –

3

map(.properties |= {NAME, NAME_LONG}) более прямолинейный и понятный.

Я бы добавил это в качестве комментария к ответу Джеффа, но правила SO о комментариях глупы, поэтому вместо этого он отвечает как ответ.

Смежные вопросы