API返回JSON数组内嵌字符串对象的有效性验证与Python解析
问题解答
1. 该JSON是否有效?
是有效的。JSON规范允许数组包含字符串类型元素,只要这些字符串本身是合法的JSON格式(内部特殊字符如双引号已正确转义),整个JSON结构就符合标准。
举个合法的示例结构:
{ "products": [ "{\"id\": 1, \"name\": \"Wireless Headphones\"}", "{\"id\": 2, \"name\": \"Smart Watch\"}" ] }
2. Python中转换为可访问键值对对象的方法
分两步处理即可:先解析整个API响应为Python字典,再遍历products数组,将每个JSON字符串单独解析为字典。
基础实现代码
import json # 假设api_response是你从API获取的JSON字符串 api_response = ''' { "products": [ "{\"id\": 1, \"name\": \"Laptop\"}", "{\"id\": 2, \"name\": \"Phone\"}" ] } ''' # 1. 解析整个响应为Python字典 parsed_data = json.loads(api_response) # 2. 逐个解析products里的JSON字符串 parsed_data['products'] = [json.loads(item) for item in parsed_data['products']] # 现在可以直接通过键访问数据 for product in parsed_data['products']: print(f"产品ID: {product['id']}, 产品名称: {product['name']}")
带异常处理的版本(推荐)
如果API返回的部分字符串可能不符合JSON格式,添加异常处理可避免程序崩溃:
import json api_response = ''' { "products": [ "{\"id\": 1, \"name\": \"Laptop\"}", "invalid-json-string", "{\"id\": 2, \"name\": \"Phone\"}" ] } ''' parsed_data = json.loads(api_response) processed_products = [] for item in parsed_data['products']: try: product_dict = json.loads(item) processed_products.append(product_dict) except json.JSONDecodeError as err: print(f"解析失败,跳过无效条目: {err}") parsed_data['products'] = processed_products
内容的提问来源于stack exchange,提问作者Daniel Guardado
相关产品推荐
相关产品推荐

