JayWay JSONPathと異なる深さで、いくつかのJSONオブジェクトを抽出

ウンベルト:

状況

  • 私はJSONを持っています
  • 私はいくつかの特定のネストされたオブジェクトを持つ配列内のすべての要素をつかむしようとしています。ハードの部分は、これらのオブジェクトのいくつかは、異なる深さでネストされているということです。
  • 私はJayWay JsonPath使用していますhttps://github.com/json-path/JsonPath、そして私のコードは次のように正確に動作しhttps://jsonpath.herokuapp.com

これは、当社のプラットフォーム上で使用することですhttps://dashdash.com知られているWebサービスの統合とスプレッドシート(と自分のプライベートなAPIすぎ) - 。

特定の場合(テスト可能)

以下の検討ソースJSONを、IはBとCよりB、CおよびG Gは、異なる深さにあるネストされたオブジェクトを持っている唯一の配列要素を返したいです

以下に、あなたは、ソースとリターンのための2つのオプションを見ることができます。

ソースJSON

[  
   {  
      "A":"val1",
      "B":"val2",
      "C":"val3",
      "D":{  
         "E":[  
            {  
               "F":"val4"
            }
         ],
         "G":[  
            {  
               "H":"val5",
               "I":"val6",
               "J":"val7"
            }
         ]
      }
   },
   {  
      "A":"val8",
      "B":"val9",
      "C":"val10",
      "D":{  
         "E":[  
            {  
               "F":"val11"
            }
         ],
         "G":[  
            {  
               "H":"val12",
               "I":"val13",
               "J":"val14"
            }
         ]
      }
   },
   {  
      "A":"val15",
      "B":"val16"
   },
   {  
      "A":"val8",
      "B":"val9",
      "C":"val10",
      "D":{  
         "E":[  
            {  
               "F":"val11"
            }
         ]
      }
   }
]

期待リターンオプション1。

[
   {
      "B":"val2",
      "C":"val3",
      "G":[
         {
            "H":"val5",
            "I":"val6",
            "J":"val7"
         }
      ]
   },
   {
      "B":"val9",
      "C":"val10",
      "G":[
         {
            "H":"val12",
            "I":"val13",
            "J":"val14"
         }
      ]
   }
]

期待リターンオプション2。

[
   {
      "B":"val2",
      "C":"val3",
      "D":{
         "E":[
            {
               "F":"val4"
            }
         ],
         "G":[
            {
               "H":"val5",
               "I":"val6",
               "J":"val7"
            }
         ]
      }
   },
   {
      "B":"val9",
      "C":"val10",
      "D":{
         "E":[
            {
               "F":"val11"
            }
         ],
         "G":[
            {
               "H":"val12",
               "I":"val13",
               "J":"val14"
            }
         ]
      }
   }
]

わたしはどこにいますか

  • 私は、クエリと、B、C及びDを持つすべての配列要素を抽出することができます $..['B','C','D']

私はB、C及びGを抽出しようとしているが、次のすべてのクエリが失敗します。

  • $..['B','C','G']:はNULLを返します。
  • $..['B','C',['D'].['G']]:G.内側に戻ってオブジェクトのみ

繰り返しますが、私はJayWay JsonPath使用していますhttps://github.com/json-path/JsonPath、そして私のコードは正確に同じように動作しhttps://jsonpath.herokuapp.com

前もって感謝します

ルイス・シルバ:

私はいくつかの異なるアプローチをしようとしてきたと私は単純な式はトリックを行うと思います:

$.*[?(@.B && @.C && @.D.G)]

これは、上で行う実験によれば(デフォルト以外の特別な設定は必要ありませんhttps://jsonpath.herokuapp.comと、次の結果が得られます。

[
   {
      "A" : "val1",
      "B" : "val2",
      "C" : "val3",
      "D" : {
         "E" : [
            {
               "F" : "val4"
            }
         ],
         "G" : [
            {
               "H" : "val5",
               "I" : "val6",
               "J" : "val7"
            }
         ]
      }
   },
   {
      "A" : "val8",
      "B" : "val9",
      "C" : "val10",
      "D" : {
         "E" : [
            {
               "F" : "val11"
            }
         ],
         "G" : [
            {
               "H" : "val12",
               "I" : "val13",
               "J" : "val14"
            }
         ]
      }
   }
]

どう思いますか?

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=118221&siteId=1