在Python中从Json数据获取值

时间:2018-08-21 16:44:15

标签: json python-3.x list dictionary

我有一个json文件,我正在尝试从中提取特定的属性数据。 Json数据本质上是一个字典。在将数据转换为文件之前,首先将其保存在这样的变量中:

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()

然后写到这样的文件中:

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

是一个名为DFIRM_ID的属性。我想创建一个名为dfirm_id = []的空列表,获取DFIRM_ID的所有值,并将该值附加到像dfirm_id.append(value)这样的列表中。我在想我需要以某种方式读取json变量数据或实际文件,但是我不确定该怎么做。关于实现此目标的简单方法有何建议?

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

根据要求,这是print(cslfJson)的样子: 实际上,它会打印出一个巨大的字典,如下所示:

  

{'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': .....}

1 个答案:

答案 0 :(得分:1)

如果您的json数据已经是字典,请利用它。字典/哈希图的优点是平均时间复杂度为O(1)。

根据您的评论,我相信这可以解决您的问题:

dfirm_id = []
for feature in cslf['features']:
    dfirm_id.append(feature['attributes']['DFIRM_ID'])