2013-04-21 16 views
13

Używam nodejs z jsonpath. mam tę strukturę json:Jak wyświetlić nazwy kluczy obiektów za pomocą jsonpath?

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

Chciałbym wiedzieć ekspresję jsonpath która zwraca tablicę z najważniejszych nazwisk obiektu things. To byłoby:

["books","movies"] 

Na razie robię to:

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

Ale nie jest eleganckie ... nie powinno być potrzeby, aby otrzymać kopię całą strukturę kiedy potrzebne są tylko nazwy kluczy.

+0

Dlaczego korzystania JSONPath kiedy można po prostu zrobić 'Object.keys (jsonStructure.things) '? – loganfsmyth

+0

To prawda, że ​​też by działało. Ale moim celem jest zrobić to tylko z jsonpath. Chodzi o to, że ciągi jsonpath będą przechowywane w pliku konfiguracyjnym. Chciałbym móc wpływać na zachowanie skryptu tylko zmieniając plik konfiguracyjny, a nie kod. – norteo

Odpowiedz

1

Nie wierzę, że to lepsze rozwiązanie niż własne:

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

Myślę, że głównym błędem jest to, że nie trzeba się martwić o tym fragmencie „uzyskanie kopii całości struktura ", ponieważ nie kopiujesz całej struktury. Masz już cały obiekt załadowany do pamięci, jsonpath nie tworzy nową kopię, po prostu zwraca odwołanie do już istniejącego obiektu, a mianowicie:

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