You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

VB如何使用Newtonsoft.Json修改JSON指定键值且不替换整个文件

问题原因分析
  • 你的代码核心错误是序列化时传入了原始读取的json字符串,而不是已经修改过的JObject对象read,所以修改后的内容完全没有被写入文件
  • 其余逻辑是正确的,Newtonsoft.Json修改部分键值后重新序列化不会改动未被修改的其他键内容,15000个键的场景下性能也完全满足需求
修正后的完整代码
' 引用命名空间(如果未添加请先导入)
' Imports System.IO
' Imports Newtonsoft.Json
' Imports Newtonsoft.Json.Linq
' Imports System.Reflection

' currentDir = app 目录,此处补充规范的应用目录获取方式,你也可以保留自己原有赋值逻辑
Dim currentDir As String = Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)
Dim jsonPath As String = Path.Combine(currentDir, "character.json") ' 用Path.Combine避免路径拼接时的分隔符错误

' 读取原始JSON
Dim json As String = File.ReadAllText(jsonPath)
' 如果原JSON包含注释,可替换为下行配置保留注释:
' Dim read As JObject = JObject.Parse(json, New JsonLoadSettings With {.CommentHandling = CommentHandling.Load})
Dim read As JObject = JObject.Parse(json)

' 修改指定字段,你可以按需求补充其余7个要修改的键逻辑
read.Item("Info")("Experience") = Convert.ToInt32(boxNewExp.Text)

' 序列化修改后的JObject,保留缩进格式
Dim output As String = JsonConvert.SerializeObject(read, Formatting.Indented)
' 写回文件
File.WriteAllText(jsonPath, output)
注意事项
  • 如果需要保留原JSON的空行、自定义缩进等非标准JSON格式,才需要用逐行替换的方案,标准JSON场景下上述方案完全符合你的需求
  • 修改多个键时直接追加read.Item("一级键")("二级键") = 新值的逻辑即可,不需要额外调整其他代码
  • 路径拼接建议统一用Path.Combine,避免手动拼接+时出现漏写斜杠的问题

内容的提问来源于stack exchange,提问作者totalepremisere

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.28 17:45:03