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

React中如何替换并更新manifest.json的JSON内容

修改GitHub API获取的manifest.json中的icons数组

通过GitHub API获取manifest.json内容后,我需要修改其中的icons数组:移除原有的favicon.ico条目,新增maskable.png、logo256.png、logo348.png三个图标条目。尝试用string.replace方法替换字符串,但没有生效。

旧的manifest.json内容

{
  "short_name": "React App",
  "name": "Create React App Sample",
  "icons": [
    {
      "src": "favicon.ico",
      "sizes": "64x64 32x32 24x24 16x16",
      "type": "image/x-icon"
    },
    {
      "src": "logo192.png",
      "type": "image/png",
      "sizes": "192x192"
    },
    {
      "src": "logo512.png",
      "type": "image/png",
      "sizes": "512x512"
    }
  ],
  "start_url": ".",
  "display": "standalone",
  "theme_color": "#000000",
  "background_color": "#ffffff"
}

期望更新后的内容

{
  "short_name": "React App",
  "name": "Create React App Sample",
  "icons": [
    {
      "src": "maskable.png",
      "sizes": "280x280",
      "type": "image/png",
      "purpose": "any maskable"
    },
    {
      "src": "logo192.png",
      "sizes": "192x192",
      "type": "image/png"
    },
    {
      "src": "logo256.png",
      "sizes": "256x256",
      "type": "image/png"
    },
    {
      "src": "logo348.png",
      "sizes": "348x348",
      "type": "image/png"
    },
    {
      "src": "logo512.png",
      "sizes": "512x512",
      "type": "image/png"
    }
  ],
  "start_url": ".",
  "display": "standalone",
  "theme_color": "#000000",
  "background_color": "#ffffff"
}

尝试的无效代码

let newContent = oldContent.replace(`{"src": "favicon.ico","sizes": "64x64 32x32 24x24 16x16","type": "image/x-icon"},`,  
`{"src": "logo256.png","sizes": "256x256","type": "image/png"},{"src": "logo348.png","sizes": "348x348",         "type": "image/png"},`);

解决方案

直接操作JSON字符串容易因为格式差异(比如空格、换行、键的顺序)导致匹配失败,正确做法是将JSON解析为JavaScript对象,修改数据结构后再转回JSON字符串:

// 假设oldContent是从GitHub API获取的JSON字符串
const manifest = JSON.parse(oldContent);

// 重构icons数组:添加新的maskable图标,保留原有非favicon条目,再新增两个图标
manifest.icons = [
  {
    "src": "maskable.png",
    "sizes": "280x280",
    "type": "image/png",
    "purpose": "any maskable"
  },
  // 过滤掉favicon.ico条目,保留其他原有图标
  ...manifest.icons.filter(icon => icon.src !== "favicon.ico"),
  // 添加新的图标条目
  {
    "src": "logo256.png",
    "sizes": "256x256",
    "type": "image/png"
  },
  {
    "src": "logo348.png",
    "sizes": "348x348",
    "type": "image/png"
  }
];

// 将修改后的对象转回格式化的JSON字符串(缩进2空格,和原格式一致)
const newContent = JSON.stringify(manifest, null, 2);

这种方法不依赖原JSON的具体格式,直接操作数据结构,稳定性和可维护性更强。filter方法精准移除不需要的条目,扩展运算符保留原有有效内容,最后通过JSON.stringify生成符合格式要求的字符串。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 16:10:25