2013-04-21 29 views
13

Tôi đang sử dụng nodejs với jsonpath. Tôi có cấu trúc json này:Làm thế nào để liệt kê các tên khóa đối tượng với jsonpath?

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

Tôi muốn biết các biểu hiện jsonpath mà trả về một mảng với những cái tên quan trọng của đối tượng things. Đó sẽ là:

["books","movies"] 

Còn bây giờ, tôi đang làm điều này:

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

Nhưng tôi không tìm thấy nó tao nhã ... tôi không nên cần phải nhận được một bản sao toàn bộ cấu trúc khi tôi chỉ cần các tên chính.

+0

Tại sao sử dụng JSONPath khi bạn chỉ có thể làm 'Object.keys (jsonStructure.things) '? – loganfsmyth

+0

Đúng, điều đó cũng sẽ hoạt động. Nhưng quan điểm của tôi là làm điều đó chỉ với jsonpath. Ý tưởng là các chuỗi jsonpath sẽ được lưu trữ trong một tập tin cấu hình. Tôi muốn để có thể ảnh hưởng đến hành vi kịch bản chỉ thay đổi tập tin cấu hình và không phải là mã. – norteo

Trả lời

1

Tôi không tin rằng có một giải pháp tốt hơn so với của riêng bạn:

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

Tôi nghĩ rằng quan niệm sai lầm chính ở đây là bạn không cần phải lo lắng về đoạn này "nhận được một bản sao của toàn bộ cấu trúc ", bởi vì bạn không sao chép toàn bộ cấu trúc. Bạn đã có toàn bộ đối tượng được nạp vào bộ nhớ, jsonpath không tạo ra một bản sao mới, nó chỉ đơn giản trả về một tham chiếu đến đối tượng đã tồn tại, ví dụ:

jsonpath.eval(jsonStructure,"$.things").pop() === jsonStructure.things //true 
Các vấn đề liên quan