Groovy JSON / GPath Request

Given the following JSON, I would like to extract the zipcode (long_name or short_name). I used JsonSlurper to swallow it into a variable and tried various queries using find / contains / etc. to capture a node that has "postal_code" in its "types" but could not figure it out. Any help is appreciated.

{ "results" : [ { "address_components" : [ { "long_name" : "Jefferson Ave", "short_name" : "Jefferson Ave", "types" : [ "route" ] }, { "long_name" : "North Newport News", "short_name" : "North Newport News", "types" : [ "neighborhood", "political" ] }, { "long_name" : "Newport News", "short_name" : "Newport News", "types" : [ "locality", "political" ] }, { "long_name" : "Virginia", "short_name" : "VA", "types" : [ "administrative_area_level_1", "political" ] }, { "long_name" : "United States", "short_name" : "US", "types" : [ "country", "political" ] }, { "long_name" : "23608", "short_name" : "23608", "types" : [ "postal_code" ] } ], "formatted_address" : "Jefferson Ave & Denbigh Blvd, Newport News, VA 23608, USA", "geometry" : { "location" : { "lat" : 37.13852930, "lng" : -76.52013079999999 }, "location_type" : "APPROXIMATE", "viewport" : { "northeast" : { "lat" : 37.13987828029151, "lng" : -76.51878181970848 }, "southwest" : { "lat" : 37.13718031970851, "lng" : -76.52147978029149 } } }, "types" : [ "intersection" ] } ], "status" : "OK" } 
+6
source share
1 answer

Below you should find a node of type postal_code. If the results or address_components elements have multiple list elements, you will need to adjust them accordingly, replacing indexed access with some iteration, but hopefully this helps.

 import groovy.json.* def text = ''' { "results" : [ <omitted rest to save space> .... } ''' def json = new JsonSlurper().parseText(text) def theNode = json.results[0] .address_components .find { it.types[0] == 'postal_code' } assert '23608' == theNode.long_name 
+9
source

Source: https://habr.com/ru/post/925175/


All Articles