尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
影刀RPA JSON文件处理:读写与嵌套解析
影刀RPA JSON文件处理读写与嵌套解析署名林焱什么情况用什么RPA流程中大量使用JSON——API返回数据、配置文件、网页数据交互。掌握JSON的读写和嵌套解析是处理API数据的必备技能。场景推荐函数特点读取JSON文件json.load文件读取JSON字符串转字典json.loads字符串解析字典转JSON字符串json.dumps序列化写入JSON文件json.dump文件写入怎么做一基础读写importjson# 写入JSON文件config{site_url:https://example.com,max_retries:3,timeout:30,headers:{User-Agent:Mozilla/5.0,Accept:application/json},targets:[首页,产品页,关于我们]}withopen(rD:\config\settings.json,w,encodingutf-8)asf:# ensure_asciiFalse: 中文不转义为\uXXXX# indent2: 格式化缩进json.dump(config,f,ensure_asciiFalse,indent2)# 读取JSON文件withopen(rD:\config\settings.json,r,encodingutf-8)asf:configjson.load(f)print(config[site_url])print(config[headers][User-Agent])print(config[targets][0])二字符串与JSON互转拼多多店群自动化上架方案importjson# JSON字符串 → Python字典解析API响应api_response{code: 0, data: {name: 张三, age: 28}, message: success}resultjson.loads(api_response)print(result[code])# 0print(result[data][name])# 张三print(result[data][age])# 28# Python字典 → JSON字符串构造API请求体request_data{![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/eeae68e041c34affad60d138ee2ffda8.png#pic_center)action:search,filters:{category:电子产品,price_min:100,price_max:5000}}json_strjson.dumps(request_data,ensure_asciiFalse)print(json_str)三嵌套JSON解析importjson# 复杂嵌套JSONapi_data{status:ok,results:[{id:1,name:商品A,price:99.9,tags:[热销,新品],seller:{name:XX旗舰店,rating:4.8,address:{city:杭州,district:西湖区}}},{id:2,name:商品B,price:199.0,tags:[推荐],seller:{name:YY专营店,rating:4.5,address:{city:上海,district:浦东新区}}}]}# 安全取值函数避免KeyErrordefsafe_get(data,*keys,defaultNone):安全获取嵌套字典的值forkeyinkeys:ifisinstance(data,dict):datadata.get(key,default)else:returndefaultreturndata# 提取所有商品信息foriteminapi_data[results]:namesafe_get(item,name)pricesafe_get(item,price)sellersafe_get(item,seller,name)citysafe_get(item,seller,address,city)tagssafe_get(item,tags,default[])print(f商品:{name}, 价格:{price}, 卖家:{seller}, 城市:{city}, 标签:{tags})四JSON配置管理importjsonimportosfromdatetimeimportdatetimeclassJsonConfig:JSON配置文件管理器def__init__(self,config_path):self.pathconfig_path self.data{}self.load()defload(self):加载配置ifos.path.exists(self.path):withopen(self.path,r,encodingutf-8)asf:self.datajson.load(f)else:self.data{}returnself.datadefsave(self):保存配置os.makedirs(os.path.dirname(self.path),exist_okTrue)withopen(self.path,w,encodingutf-8)asf:json.dump(self.data,f,ensure_asciiFalse,indent2)defget(self,key,defaultNone):获取值支持点分隔的路径a.b.ckeyskey.split(.)valueself.dataforkinkeys:ifisinstance(value,dict):valuevalue.get(k,default)else:returndefaultreturnvalueifvalueisnotNoneelsedefaultdefset(self,key,value):设置值支持点分隔的路径keyskey.split(.)dataself.dataforkinkeys[:-1]:ifknotindata:data[k]{}datadata[k]data[keys[-1]]value self.save()defupdate(self,dict_data):批量更新self.data.update(dict_data)self.save()# 使用configJsonConfig(rD:\config\flow_config.json)# 读取支持点路径urlconfig.get(api.base_url,https://default.com)timeoutconfig.get(api.timeout,30)# 写入config.set(api.base_url,https://api.example.com)config.set(api.timeout,15)config.set(last_run,datetime.now().strftime(%Y-%m-%d %H:%M))完整流程API数据解析保存importjsonimportosfromdatetimeimportdatetime# yd_input: api_response (JSON字符串), output_dirapi_responseyd_input.get(api_response,{})output_diryd_input.get(output_dir,rD:\数据\API结果)# 解析API响应try:datajson.loads(api_response)exceptjson.JSONDecodeErrorase:yd_output{status:error,message:fJSON解析失败:{e}}else:# 提取数据results[]ifisinstance(data,dict):# 单个对象ifdataindata:itemsdata[data]ifisinstance(items,list):foriteminitems:results.append({id:item.get(id),name:item.get(name,),price:item.get(price,0),stock:item.get(stock,0),status:item.get(status,unknown)})elifisinstance(items,dict):results.append({id:items.get(id),name:items.get(name,),price:items.get(price,0),})elifisinstance(data,list):# 直接是数组foritemindata:ifisinstance(item,dict):results.append({id:item.get(id),name:item.get(name,),price:item.get(price,0),})# 保存结果os.makedirs(output_dir,exist_okTrue)timestampdatetime.now().strftime(%Y%m%d_%H%M%S)output_pathos.path.join(output_dir,fapi_result_{timestamp}.json)withopen(output_path,w,encodingutf-8)asf:json.dump({fetch_time:timestamp,count:len(results),data:results},f,ensure_asciiFalse,indent2)yd_output{status:ok,count:len(results),output:output_path}有什么坑坑一JSON中的中文被转义成\uXXXX现象写入JSON文件后中文变成了\u5f20\u4e09这种形式。原因json.dumps默认ensure_asciiTrue会把非ASCII字符转义。解决设置ensure_asciiFalseimportjson data{name:张三,city:北京}# 正确中文正常显示json_strjson.dumps(data,ensure_asciiFalse)print(json_str)# {name: 张三, city: 北京}# 错误中文被转义# json_str json.dumps(data) ❌# {name: \u5f20\u4e09, city: \u5317\u4eac}# 写入文件时也要加withopen(data.json,w,encodingutf-8)asf:json.dump(data,f,ensure_asciiFalse,indent2)坑二JSON解析失败格式错误现象json.loads报JSONDecodeError: Expecting property name enclosed in double quotes。原因JSON规范要求键名和字符串值必须用双引号不能用单引号。Python字典可以用单引号但JSON不行。解决TEMU店群如何管理运营importjson# 正确的JSON双引号datajson.loads({name: 张三, age: 28})# 错误单引号不是合法JSON# data json.loads({name: 张三, age: 28}) ❌# 如果数据源用了单引号比如Python repr输出需要先替换bad_json{name: 张三, age: 28}fixed_jsonbad_json.replace(,)try:datajson.loads(fixed_json)except:# 更安全的方式用ast.literal_eval解析Python字面量importast dataast.literal_eval(bad_json)坑三JSON中数值精度丢失现象API返回的金额是99.90解析后变成了99.9。或者大整数丢失精度。原因JSON的数字类型在Python中被解析为float或intfloat会有精度问题。解决金额用字符串传输或用DecimalimportjsonfromdecimalimportDecimal# 方案1金额作为字符串data{price:99.90}# JSON中是字符串price_strjson.loads({price: 99.90})[price]print(price_str)# 99.90 保持原样# 方案2用parse_float参数解析为Decimaldatajson.loads({price: 99.90},parse_floatDecimal)print(data[price])# Decimal(99.90)# 方案3大整数用parse_int# JavaScript的JSON.parse对超大整数会丢精度# Python的json模块默认不会但序列化为字符串时要注意big_num123456789012345678901234567890data{id:big_num}# json.dumps会正确序列化大整数json_strjson.dumps(data)# {id: 123456789012345678901234567890}坑四嵌套JSON取值时KeyError现象取data[user][name]时报KeyError: user因为user键不存在。解决用安全取值# 方案1逐层getnamedata.get(user,{}).get(name,未知)# 方案2try-excepttry:namedata[user][name]except(KeyError,TypeError):name未知# 方案3封装安全取值函数见前面的 safe_getdefsafe_get(data,*keys,defaultNone):forkeyinkeys:ifisinstance(data,dict):datadata.get(key,default)![在这里插入图片描述](https://i-blog.csdnimg.cn/direct/e68956dc985941a99ff1d0baf3eb9ae8.png#pic_center)elifisinstance(data,list)andisinstance(key,int):if0keylen(data):datadata[key]else:returndefaultelse:returndefaultreturndata# 使用namesafe_get(data,user,name,default未知)citysafe_get(data,user,address,city,default未知)first_tagsafe_get(data,tags,0,default)
RELATED

相关推荐

C语言语法笔记

C语言语法笔记

C语言语法笔记 常见的 switch case switch(opcode){case 0b00000000: //每一个都要带break;add(inst); //别忘了defaultbreak; //每个情况前面都有casecase 0b10000000: //默认十进制,二进制十六进制要加0b0xli(inst);break;case 0b11000000:bner(inst);break;defaul…

📅 2026/10/14 17:51:43
变增益运算放大器(PGA)原理与应用:动态范围扩展与信号调理技术

变增益运算放大器(PGA)原理与应用:动态范围扩展与信号调理技术

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 变增益运算放大器(PGA)是模拟电路设计中的关键构建模块,它通过数字或模拟信号控制增益&#xff0c…

📅 2026/9/5 7:29:40
Linux md5sum 命令超全详解|文件校验 / 防篡改 / 批量验证一站式掌握

Linux md5sum 命令超全详解|文件校验 / 防篡改 / 批量验证一站式掌握

1. 命令简介 md5sum 是一个基于 MD5(Message-Digest Algorithm 5)报文摘要算法的文件完整性校验工具。它会对输入的数据计算出一个长度为 128 位(32 个十六进制字符)的哈希值,通常称为 “校验和” 或 “指纹”。 主要…

📅 2026/10/13 1:12:17
MORE NEWS

更多资讯

📰

QCOM_V1.6深度解析:面向通信模组的协议级串口调试工作流

1. 这不是“下载链接”,而是一套被低估的串口调试工作流很多人看到“QCOM_V1.6安装包免费下载”这个标题,第一反应是点开找网盘链接、复制提取码、解压双击运行——然后发现界面卡顿、AT指令无响应、日志刷屏却找不到关键报错,最后默默卸载&a…

📰

STM32智慧仓库管理系统:从传感器到上位机的完整实现

简介:一份基于STM32的智慧仓库管理系统完整毕业设计源码包,面向正在准备毕设的计算机相关专业学生及需要项目实战的C语言学习者,也可直接用作课程设计或期末大作业。资源共403个文件,压缩包约15.47MB,核心代码以C语言源…

📰

Unity数字孪生机械臂控制:虚实联动通信层搭建与避坑指南

简介:这套资源围绕数字孪生、Unity与机械臂控制的虚实联动项目,面向Unity开发者、工业数字孪生学习者及自动化控制爱好者,帮助解决虚拟环境与真实机械臂之间双向通信与同步控制的落地问题。资源中涉及三维场景搭建、机械臂模型处理、滑动条UI…

📰

OpenJarvis:本地AI智能体框架的隐私优先架构

1. OpenJarvis不是又一个“本地大模型运行器”,它是智能体架构范式的本地化重构你可能已经试过Ollama、LM Studio、Text Generation WebUI,甚至亲手编译过llama.cpp——它们都干同一件事:把大语言模型塞进你自己的电脑里跑起来。但OpenJarvis…

📰

桌面Agent语音本地化:端侧ASR的工程落地与信任基建

1. 这不是“加个麦克风”那么简单:为什么桌面 Agent 的语音能力卡在本地运行这一步最近刷技术社区,几乎每天都能看到新发布的桌面 Agent 项目——能自动整理邮件、能读取剪贴板内容、能调用本地软件执行任务,甚至能根据屏幕截图生成操作建议。…

📰

风光储孤岛微电网下垂控制建模设计及仿真搭建【附详细建模报告】

💥💥💞💞欢迎来到本博客❤️❤️💥💥 🏆博主优势:🌞🌞🌞博客内容尽量做到思维缜密,逻辑清晰,为了方便读者。 &#x1f381…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬