Javascript 替换json中文本的最佳方法是什么?

Javascript 替换json中文本的最佳方法是什么?,javascript,json,Javascript,Json,因此,我有一堆JSON数据,其中包含几个字段。例如: [{ "id": "XXX", "version": 1, "head": { "text": "Main title", "sub": { "value": "next" }, "place": "secondary" }, "body": [{ "id": "XXX1",

因此,我有一堆
JSON
数据,其中包含几个字段。例如:

[{
    "id": "XXX",
    "version": 1,
    "head": {
        "text": "Main title",
        "sub": {
            "value": "next"
        },
        "place": "secondary"
    },
    "body": [{
            "id": "XXX1",
            "info": "three little birds",
            "extended": {
                "spl": {
                    "text": "song",
                    "type": {
                        "value": "a"
                    }
                }
            }
        },
        {
            "id": "XXX2",
            "info": [
                "how are you?"
            ],
            "extended": {
                "spl": {
                    "text": "just",
                    "non-type": {
                        "value": "abc"
                    }
                }
            }
        }
    ]
}]
  • 我尝试做的是转换表(来自不同的JSON文件) 如果字段的值为“a”,则将其替换为“其他文本…”等

  • 我有一个用于
    JSON
    管道的服务,所以我想这是进行替换的正确地方

  • 因此,对于这个例子,我有上面的
    JSON
    ,在我的转换表中,我有以下术语:

    下一步:前进, 歌曲:音乐, a:选择1, 只是:从
    等等。

    最好的方法是解析它,替换对象中的文本,然后将其字符串化

    第二个最好的方法是使用正则表达式

    在本例中,如果路径无法索引,我会捕获异常,并使用
    ['type']
    而不是
    .type
    ,因此如果您愿意,它将扩展到索引
    'non-type'

    const数据=`[{
    “id”:“XXX”,
    “版本”:1,
    “头”:{
    “正文”:“主要标题”,
    “sub”:{
    “值”:“下一个”
    },
    “地点”:“次要”
    },
    “正文”:[{
    “id”:“XXX1”,
    “信息”:“三只小鸟”,
    “扩展”:{
    “spl”:{
    “文本”:“歌曲”,
    “类型”:{
    “值”:“a”
    }
    }
    }
    },
    {
    “id”:“XXX2”,
    “信息”:[
    “你好吗?”
    ],
    “扩展”:{
    “spl”:{
    “文本”:“只是”,
    “非类型”:{
    “价值”:“abc”
    }
    }
    }
    }
    ]
    }]
    `
    const o=JSON.parse(数据)
    o[0].body.forEach(b=>{
    试一试{
    if(b.extended.spl['type'].value=='a'){
    b、 extended.spl['type'].value='CHANGED'
    }
    }捕获(e){}
    })
    const newData=JSON.stringify(o,null,2)
    
    console.log(newData)
    您要查找的内容可以通过模板实现。用一些特定的标记替换变量部分,这些标记可以从一些外部工具(如
    perl
    sed
    )中找到并替换

    例如,您可以有一个
    template.json
    ,如下所示:

    ...
    "type": {
      "value": "@@VALUE@@"
    }
    ...
    
    然后,当您需要实际的JSON时,您可以通过一个中间脚本来传递它,该脚本用实际数据替换这些模板

    cat template.json | sed -e 's/@@VALUE@@/my_value/' > target.json
    
    或者,使用Perl:

    cat template.json | perl -pi -e 's:\@\@VALUE\@\@:my_value:' > target.json
    

    好的,你能举个例子吗?在一个对象中更改文本比在一个复杂的JSON字符串中更容易-因此,JSON.parse首先,进行更改,JSON.stringify返回到JSONI如果这些值可以存在于整个对象树中的任何位置,那么我想这里应该有某种递归函数。以顶级对象为例,检查它是否是数组,如果是,则循环其元素并递归调用每个元素,如果不是,则循环其属性,并检查每个元素是否都是被替换的值。如果是,则替换它;如果不是,则递归调用该属性。可能会检查其他文字类型,等等,以确保清洁度。不包含字段。JSON是某些数据结构的文本表示。您必须使用JSON表示恢复数据结构,更改数据,然后再次将其编码为JSON。这是一个角度项目。您的问题肯定没有提到角度,您提到的JSON文件意味着文件操作。若它并没有呈现JSON文件操作,那个么这个问题就并没有任何意义,因为您可以直接对已解析的对象进行所需的更改,然后再次对其进行序列化