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

如何使用Node.js替换JSON文件的值字符串且不修改对应键名

问题原因

你现在直接把整份JSON文本传给owo方法处理,会把包括键名、占位符在内的所有内容全都匹配替换,自然就会改到你不想动的键名部分。正确的做法是先把JSON解析成JS对象,递归遍历所有字符串类型的值,仅对这些值做owo转换,最后再序列化为JSON即可。

实现代码

把你原来的代码替换为以下内容即可:

const owo = require('@zuzak/owo')
const fs = require('fs')

// 递归处理对象的方法,仅转换字符串值
const processObject = (obj) => {
  // 数组类型遍历元素处理
  if (Array.isArray(obj)) {
    return obj.map(item => processObject(item))
  }
  // 对象类型遍历键值对处理
  if (typeof obj === 'object' && obj !== null) {
    const newObj = {}
    for (const key in obj) {
      // 键名原样保留,仅处理对应的值
      newObj[key] = processObject(obj[key])
    }
    return newObj
  }
  // 仅字符串类型的值做owo转换
  if (typeof obj === 'string') {
    return owo(obj)
  }
  // 数字、布尔、null等其他类型原样返回
  return obj
}

// 文件读写逻辑
const rawJson = fs.readFileSync('../jsonfile.json', 'utf-8')
const originData = JSON.parse(rawJson)
const processedData = processObject(originData)
// 第三个参数2是为了生成格式化的JSON,不需要可以删掉
fs.writeFileSync('../owo.json', JSON.stringify(processedData, null, 2), 'utf-8')
可选优化

如果你不想转换{1}、{EndDate}这类带占位符的字符串,可以在字符串转换的判断逻辑中增加过滤规则:

if (typeof obj === 'string') {
  // 包含{}占位符的字符串不做转换,不需要该规则可以删除该判断
  if (!obj.includes('{') && !obj.includes('}')) {
    return owo(obj)
  }
  return obj
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.29 23:27:03