如何修改JSON文件中的嵌套值(含Postman集合示例及代码调试需求)
如何修改JSON文件中的嵌套值(含Postman集合示例及代码调试需求)
嗨,我看了你遇到的问题和尝试的代码——问题出在Postman集合里的body.raw本身是一个JSON格式的字符串,不是直接可访问的嵌套对象,所以你直接通过jsonObj["item"][0]["body"][1]去访问肯定找不到目标值啦。我来给你一步步修正,还会告诉你怎么修改body里的任意细节~
正确的代码实现(基于Newtonsoft.Json)
你用的是Json.NET(Newtonsoft.Json),那我们就基于这个库来写,代码里加了详细注释,一看就懂:
using System.IO; using Newtonsoft.Json; class Program { static void Main() { // 1. 读取本地的Postman集合JSON文件 string jsonFilePath = "invoice.json"; string rawJsonContent = File.ReadAllText(jsonFilePath); dynamic rootJsonObj = JsonConvert.DeserializeObject(rawJsonContent); // 2. 定位到你要修改的那个请求(这里是第一个item,对应"019048MAM000"的请求) var targetRequestItem = rootJsonObj.item[0]; // 把body里的raw字符串反序列化成可操作的动态对象 dynamic requestBodyObj = JsonConvert.DeserializeObject(targetRequestItem.request.body.raw); // 3. 修改目标值:这里替换supplierIdentifier为你要的新值 requestBodyObj.invoiceTIEF.supplierIdentifier = "0194711AMM00"; // ✅ 如果你要修改body里的其他任意细节,直接按嵌套路径改就行: // 比如修改合作伙伴名称 // requestBodyObj.invoiceTIEF.supplierDetails.partnerName = "更新后的合作伙伴名"; // 比如修改地址里的街道 // requestBodyObj.invoiceTIEF.supplierDetails.address.street = "新的街道地址"; // 甚至修改请求的bearer token也可以: // targetRequestItem.request.auth.bearer[0].value = "你的新Token"; // 4. 把修改后的body对象重新序列化为格式化的字符串,放回原位置 targetRequestItem.request.body.raw = JsonConvert.SerializeObject(requestBodyObj, Formatting.Indented); // 5. 把整个修改后的JSON对象序列化回文件,保留缩进格式 string updatedJson = JsonConvert.SerializeObject(rootJsonObj, Formatting.Indented); File.WriteAllText(jsonFilePath, updatedJson); } }
关键说明
- 为什么要单独处理
body.raw?因为Postman集合的请求体是存在raw字段里的JSON字符串,不是直接的嵌套对象,必须先反序列化它才能修改内部的字段 - 用
dynamic类型是为了灵活操作嵌套JSON,不用提前定义一堆强类型类;如果你的JSON结构固定,也可以用VS的「粘贴JSON为类」功能生成强类型,这样更安全 - 如果要批量修改多个
item里的请求,只需要遍历rootJsonObj.item数组就行,比如用foreach循环逐个处理
前置准备
确保你的项目已经安装了Newtonsoft.Json包:
- 打开NuGet包管理器,搜索「Newtonsoft.Json」安装
- 或者用Package Manager Console执行:
Install-Package Newtonsoft.Json
测试前记得备份原始的invoice.json文件哦,避免误操作丢失数据~
内容来源于stack exchange
相关产品推荐
相关产品推荐

