2013-04-21 4 views
13

Я использую nodejs с jsonpath. У меня есть эта структура JSon:Как перечислить имена ключей объектов с помощью jsonpath?

{ 
    things:{ 
    books: [ 
     {name: "book1"}, 
     {name: "book2"}, 
     {name: "book3"}, 
     {name: "book4"}, 
    ], 
    movies: [ 
     {name: "movie1"}, 
     {name: "movie2"}, 
     {name: "movie3"}, 
     {name: "movie4"}, 
    ] 
    } 
} 

Я хотел бы знать выражение jsonpath, который возвращает массив с ключевыми именами things объекта. Это было бы:

["books","movies"] 

В настоящем время, я делаю это:

Object.keys(jsonpath.eval(jsonStructure,"$.things").pop()); 

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

+0

Почему использовать JSONPath, когда вы можете просто сделать 'Object.keys (jsonStructure.things) '? – loganfsmyth

+0

Правда, это тоже сработает. Но я хочу сделать это только с jsonpath. Идея состоит в том, что строки jsonpath будут храниться в файле конфигурации. Я хотел бы иметь возможность влиять на поведение скрипта, изменяя только файл конфигурации, а не код. – norteo

ответ

1

Я не считаю, что это лучшее решение, чем ваши собственные:

Object.keys(jsonpath.eval(jsonStructure,"$.things").pop()); 

Я думаю, что главное заблуждение в том, что вам не придется беспокоиться об этом фрагменте кода «получить копию целого структура ", потому что вы не копируете всю структуру. У вас уже есть весь объект загружен в память, jsonpath не создает новую копию, он просто возвращает ссылку на уже существующий объект, то есть:

jsonpath.eval(jsonStructure,"$.things").pop() === jsonStructure.things //true