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
相关产品推荐
相关产品推荐

