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

如何清空ADODB.Stream?解决VBScript替换JSON内容残留问题

解决VBScript文件替换残留及JSON修改优化问题

文件末尾残留原内容的修复

当替换后的内容比原内容短时,ADODB.Stream默认不会自动截断原文件中未被覆盖的部分,导致末尾残留旧字符。有两种可靠的解决方式:

方式1:截断流

在写入新内容后调用SetEOS()方法,手动截断流,确保只保存新内容:

Set stream = CreateObject("ADODB.Stream")
stream.Mode = 3
stream.Type = 2
stream.Charset = "UTF-8"
stream.Open
stream.LoadFromFile p
stream.Position = 0
strContent = stream.ReadText

re.IgnoreCase = False
re.Global = False
re.Pattern = ",""beautifybuttonstate"":""[^"]+"""
strContent = re.Replace(strContent, ",""beautifybuttonstate"":""USER_HIDE""" )

stream.Position = 0
stream.WriteText strContent
stream.SetEOS ' 截断流,丢弃未被覆盖的原内容
stream.SaveToFile p, 2
stream.Close

方式2:重新打开流写入

读取内容后关闭原流,重新创建流写入新内容,完全覆盖原文件:

' 读取原文件
Set stream = CreateObject("ADODB.Stream")
stream.Mode = 3
stream.Type = 2
stream.Charset = "UTF-8"
stream.Open
stream.LoadFromFile p
strContent = stream.ReadText
stream.Close

' 执行替换
re.IgnoreCase = False
re.Global = False
re.Pattern = ",""beautifybuttonstate"":""[^"]+"""
strContent = re.Replace(strContent, ",""beautifybuttonstate"":""USER_HIDE""" )

' 写入新内容
Set stream = CreateObject("ADODB.Stream")
stream.Type = 2
stream.Charset = "UTF-8"
stream.Open
stream.WriteText strContent
stream.SaveToFile p, 2
stream.Close

JSON修改的更优方案

用正则修改JSON容易出现格式错误(比如转义字符、嵌套结构匹配失败),推荐通过脚本引擎解析JSON为对象后修改,再重新序列化:

Function UpdateJsonValue(filePath, targetKey, newVal)
    ' 读取JSON内容
    Set stream = CreateObject("ADODB.Stream")
    stream.Type = 2
    stream.Charset = "UTF-8"
    stream.Open
    stream.LoadFromFile filePath
    rawJson = stream.ReadText
    stream.Close

    ' 使用JScript解析并修改JSON
    Set sc = CreateObject("ScriptControl")
    sc.Language = "JScript"
    ' 转义单引号避免解析错误
    escapedJson = Replace(rawJson, "'", "\'")
    escapedVal = Replace(newVal, "'", "\'")
    sc.AddCode "var jsonObj = JSON.parse('" & escapedJson & "');"
    sc.AddCode "jsonObj." & targetKey & " = '" & escapedVal & "';"
    updatedJson = sc.Eval("JSON.stringify(jsonObj)")

    ' 写入修改后的JSON
    Set stream = CreateObject("ADODB.Stream")
    stream.Type = 2
    stream.Charset = "UTF-8"
    stream.Open
    stream.WriteText updatedJson
    stream.SaveToFile filePath, 2
    stream.Close
End Function

' 调用示例:修改beautifybuttonstate的值
UpdateJsonValue p, "beautifybuttonstate", "USER_HIDE"

如果目标属性是嵌套结构(如data.settings.beautifybuttonstate),直接修改sc.AddCode中的属性路径即可,这种方法能严格保证JSON结构的合法性。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.11 10:05:06