如何在python中从JSON字符串中提取单个值而不将其解析为Javascript对象

toe95027  于 2023-01-14  发布在  Python
关注(0)|答案(1)|浏览(99)

我有一个JSON响应-[{'address': '123 Any Street', 'province': 'ON', 'postal_code': 'L1P 2X2', 'co': 'BURL'}]
我想从这个响应中得到单独的值,如地址= 123 Any Street,省= ON等。我想在渲染模板时使用这些值。

print(qry_activity)
if (qry_activity is not None):
    results_activity = [{
        "address": row.address,
        "province": row.province,
        "postal_code": row.postal_code,
        "co": row.co
    }
        for row in qry_activity.all()]

我该怎么做呢?

liwlm1x9

liwlm1x91#

你可以把输入转换成字典,而不需要自己使用json.loadsast.literal_eval来构造字典:
如果你想使用json.loads,你需要修改格式,因为在JSON中使用单引号是无效的:

import json

json_response = "[{'address': '123 Any Street', 'province': 'ON', 'postal_code': 'L1P 2X2', 'co': 'BURL'}]"
json_response = json_response.replace('\'', '\"')

dictionary_result = json.loads(json_response)[0]

print(type(dictionary_result))
print(dictionary_result)

结果是:

<class 'dict'>
[{'address': '123 Any Street', 'province': 'ON', 'postal_code': 'L1P 2X2', 'co': 'BURL'}]

或者使用ast.literal_eval方法,该方法接受一个字符串并 * 逐字 * 按原样计算:

import ast

json_response = "[{'address': '123 Any Street', 'province': 'ON', 'postal_code': 'L1P 2X2', 'co': 'BURL'}]"

dictionary_result = ast.literal_eval(json_response)[0]

print(type(dictionary_result))
print(dictionary_result)

其输出与第一个示例相同。
如果你得到的是一个列表,而不是一个表示列表的字符串,你可以只检索第一个元素:

json_response = [{'address': '123 Any Street', 'province': 'ON', 'postal_code': 'L1P 2X2', 'co': 'BURL'}]

dictionary_result = json_response[0]

相关问题