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
管道的服务,所以我想这是进行替换的正确地方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文件操作,那个么这个问题就并没有任何意义,因为您可以直接对已解析的对象进行所需的更改,然后再次对其进行序列化