因此,我有一堆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
,并且在转换表中,我具有以下术语:
下一个:前进, 歌曲:音乐, 答:option1, 只是:来自 等等...
答案 0 :(得分:0)
最好的方法是解析它,替换对象中的文本,然后对其进行字符串化。
下一个最佳方法是使用正则表达式。
在此示例中,如果无法为路径建立索引,我会捕获异常,并使用['type']
而不是.type
,以便根据需要扩展为索引'non-type'
。
const data = `[{
"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"
}
}
}
}
]
}]
`
const o = JSON.parse(data)
o[0].body.forEach(b => {
try {
if (b.extended.spl['type'].value === 'a') {
b.extended.spl['type'].value = 'CHANGED'
}
} catch (e) {}
})
const newData = JSON.stringify(o, null, 2)
console.log(newData)
如果您知道并且可以依赖于源代码符合性,那么字符串替换方法将起作用,例如,唯一的"value"
位于"type"
内
const data = `[{
"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"
}
}
}
}
]
}]
`
const newData = data.replace(/"value": "a"/g, '"value": "NEWVALUE"')
console.log(newData)
答案 1 :(得分:0)
您要寻找的东西可以通过模板来实现。用可以从某些外部工具(例如class App : Application(), HasActivityInjector, HasSupportFragmentInjector {
@Inject
lateinit var activityInjector: DispatchingAndroidInjector<Activity>
@Inject
lateinit var fragmentInjector: DispatchingAndroidInjector<Fragment>
override fun onCreate() {
super.onCreate()
DaggerAppComponent
.builder()
.appModule(AppModule(this))
.networkModule(NetworkModule("https://jsonplaceholder.typicode.com/"))
.build()
.inject(this)
}
override fun activityInjector(): AndroidInjector<Activity> {
return activityInjector
}
override fun supportFragmentInjector(): AndroidInjector<Fragment> {
return fragmentInjector
}
}
或perl
中找到并替换的某些特定标记替换变量部分。
例如,您可能有一个sed
,内容如下:
template.json
然后,当您需要实际的JSON时,可以通过将这些模板替换为实际数据的中间脚本来传递它。
...
"type": {
"value": "@@VALUE@@"
}
...
或者,使用Perl:
cat template.json | sed -e 's/@@VALUE@@/my_value/' > target.json