2013-04-21 11 views
13

nodejsjsonpathを使用しています。 私は、このJSON構造を有する:jsonpathでオブジェクトのキー名をリストする方法は?

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

私はthingsオブジェクトのキー名を配列として返すjsonpath式を知っていただきたいと思います。それは次のようになります。

["books","movies"] 

今のところ、私はこれやっている:

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

をしかし、私はそれがエレガント見つからない...私はときに私のコピーに全体構造を取得する必要はありませんキー名だけが必要です。

+0

あなただけの 'Object.keysを行うことができたときになぜJSONPathを使用します(jsonStructure.things) '? – loganfsmyth

+0

真実でもあります。しかし、私の指摘はjsonpathでのみ行うことです。アイデアは、jsonpath文字列が設定ファイルに格納されるということです。私はスクリプトの動作に影響を与えることができるようにしたいのは、コードではなく設定ファイルを変更することだけです。 – norteo

答えて

1

私は自分自身のより良い解決策があるとは思わない:

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

私はここでの主な誤解は、あなたが全体のコピーを取得し、」このスニペットを心配する必要はありませんということだと思います構造体全体をコピーしていないためです。あなたは既にすなわち、jsonpathは新しいコピーを作成しません、それは単に既存のオブジェクトへの参照を返し、メモリにロードされたオブジェクト全体を持っている:

jsonpath.eval(jsonStructure,"$.things").pop() === jsonStructure.things //true 
関連する問題