0

I have a json file that I am trying to pull specific attribute data from. The Json data is essentially a dictionary. Before the data is turned into a file, it is first held in a variable like this:

params = {'f': 'json', 'where': '1=1', 'geometryType': 'esriGeometryPolygon', 'spatialRel': 'esriSpatialRelIntersects','outFields': '*', 'returnGeometry': 'true'}
r = requests.get('https://hazards.fema.gov/gis/nfhl/rest/services/CSLF/Prelim_CSLF/MapServer/3/query', params)

cslfJson = r.json()

and then written into a file like this:

path = r"C:/Workspace/Sandbox/ScratchTests/cslf.json"
with open(path, 'w') as f:
    json.dump(cslfJson, f, indent=2)

within this json data is an attribute called DFIRM_ID. I want to create an empty list called dfirm_id = [], get all of the values for DFIRM_ID and for that value, append it to the list like this dfirm_id.append(value). I am thinking I need to somehow read through the json variable data or the actual file, but I am not sure how to do it. Any suggestions on an easy method to accomplish this?

dfirm_id = []
for k, v in cslf:
    if cslf[k] == 'DFIRM_ID':
        dfirm.append(cslf[v])

As requested, here is what print(cslfJson) looks like: It actually prints a huge dictionary that looks like this:

{'displayFieldName': 'CSLF_ID', 'fieldAliases': {'OBJECTID': 'OBJECTID', 'CSLF_ID': 'CSLF_ID', 'Area_SF': 'Area_SF', 'Pre_Zone': 'Pre_Zone', 'Pre_ZoneST': 'Pre_ZoneST', 'PRE_SRCCIT': 'PRE_SRCCIT', 'NEW_ZONE': 'NEW_ZONE', 'NEW_ZONEST': .... {'attributes': {'OBJECTID': 26, 'CSLF_ID': '13245C_26', 'Area_SF': 5.855231804165408e-05, 'Pre_Zone': 'X', 'Pre_ZoneST': '0.2 PCT ANNUAL CHANCE FLOOD HAZARD', 'PRE_SRCCIT': '13245C_STUDY1', 'NEW_ZONE': 'A', 'NEW_ZONEST': None, 'NEW_SRCCIT': '13245C_STUDY2', 'CHHACHG': 'None (Zero)', 'SFHACHG': 'Increase', 'FLDWYCHG': 'None (Zero)', 'NONSFHACHG': 'Decrease', 'STRUCTURES': None, 'POPULATION': None, 'HUC8_CODE': None, 'CASE_NO': None, 'VERSION_ID': '2.3.3.3', 'SOURCE_CIT': '13245C_STUDY2', 'CID': '13245C', 'Pre_BFE': -9999, 'Pre_BFE_LEN_UNIT': None, 'New_BFE': -9999, 'New_BFE_LEN_UNIT': None, 'BFECHG': 'False', 'ZONECHG': 'True', 'ZONESTCHG': 'True', 'DFIRM_ID': '13245C', 'SHAPE_Length': 0.009178426056888393, 'SHAPE_Area': 4.711699932249018e-07, 'UID': 'f0125a91-2331-4318-9a50-d77d042a48c3'}}, {'attributes': .....}

2
  • Sure, see above. Commented Aug 21, 2018 at 16:55
  • Well, sadly you've truncated the most important bit, i.e. 'NEW_ZONEST': .... {'attributes': {'OBJECTID': We need to know the structure of your dictionary, e.g. is 'attributes' dictionary a value of 'NEW_ZONEST or something else? Basically, it would help if you gave us an example dictionary we can run. Commented Aug 21, 2018 at 17:08

1 Answer 1

1

If your json data is already a dictionary, then take advantage of that. The beauty of a dictionary / hashmap is that it provides an average time complexity of O(1).

Based on your comment, I believe this will solve your problem:

dfirm_id = []
for feature in cslf['features']:
    dfirm_id.append(feature['attributes']['DFIRM_ID'])
Sign up to request clarification or add additional context in comments.

1 Comment

They are all nested like this { displayFieldName: "CSLF_ID", ..., features` : [ {attributes: {..., DFIRM: "13245C", ...}, ...} ] `

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.