2017-11-30 26 views
1

私はJsonpathでJsonの配列を値でフィルタリングしようとしています。私は下のJSONで国のlong_nameを取得したいと思います。これを行うために、タイプ[0] == "country"でadress_componentsをフィルタリングしますが、動作しないようです。JsonPath:配列の値でフィルタリング

JsonPath私が試した:

$.results[0].address_components[?(@['types'][0]=="country")].long_name 

を私が望む結果は次のとおりです。 "カナダ"。

JSON:

{ 
     "results" : [ 
      { 
      "address_components" : [ 
       { 
        "long_name" : "5510-5520", 
        "short_name" : "5510-5520", 
        "types" : [ "street_number" ] 
       }, 
       { 
        "long_name" : "Yonge Street", 
        "short_name" : "Yonge St", 
        "types" : [ "route" ] 
       }, 
       { 
        "long_name" : "Willowdale", 
        "short_name" : "Willowdale", 
        "types" : [ "neighborhood", "political" ] 
       }, 
       { 
        "long_name" : "North York", 
        "short_name" : "North York", 
        "types" : [ "political", "sublocality", "sublocality_level_1" ] 
       }, 
       { 
        "long_name" : "Toronto", 
        "short_name" : "Toronto", 
        "types" : [ "locality", "political" ] 
       }, 
       { 
        "long_name" : "Toronto Division", 
        "short_name" : "Toronto Division", 
        "types" : [ "administrative_area_level_2", "political" ] 
       }, 
       { 
        "long_name" : "Ontario", 
        "short_name" : "ON", 
        "types" : [ "administrative_area_level_1", "political" ] 
       }, 
       { 
        "long_name" : "Canada", 
        "short_name" : "CA", 
        "types" : [ "country", "political" ] 
       }, 
       { 
        "long_name" : "M2N 5S3", 
        "short_name" : "M2N 5S3", 
        "types" : [ "postal_code" ] 
       } 
      ] 
      } 
     ], 
     "status" : "OK" 
} 

はあなたの助けをいただき、ありがとうございます。

答えて

0

次JSONPathが動作します:

$..address_components[?(@.types[0] == 'country')].long_name 

は、それを破壊:

  • $..address_componentsaddress_componentsアレイ上の焦点は
  • [?(@.types[0] == 'country')]:名前付きの型の属性を持つaddress_componentsサブ文書を検索します」タイプ "は、最初の値が"国 "である配列を含む
  • .long_name:このサブ文書のlong_name属性を返します。 Jayway JsonPath EvaluatorおよびJavaで使用して

確認済み:

JSONArray country = JsonPath.parse(json) 
    .read("$..address_components[?(@.types[0] == 'country')].long_name"); 

// prints Canada 
System.out.println(country.get(0)); 
+0

は、それが動作ありがとうございます! – ShenM

関連する問題