我正在尝试做两件事:
因此,所有TODO必须被" englishDefault"中出现的字符串替换。
我有以下JSON:
{
"semantics": [
{
"englishLabel": "Quiz introduction",
"fields": [
{
"englishLabel": "Display introduction",
},
{
"englishDefault": "Start Quiz",
"default": "TODO"
}
]
}
]
}
第2部分已经解决,但我无法解答答案: Replace with previous string in a JSON array
答案 0 :(得分:1)
你需要一系列for循环,从你的例子来看,目前尚不清楚TODO是否可以出现在JSON结构的任何地方或者只是在字段下面,所以我将假设它最简单,即它只能出现在fields数组
for(var i = 0; i < semantics[0].fields.length; i++)
{
var fields = semantics[0].fields[i];
//declare empty previous variable to store the previous key
var previousKey;
for (var key in fields) {
if (p.hasOwnProperty(key)) {
var value = fields[key];
if(value == 'TODO')
{
console.log('Found TODO, please replace');
}
else {
//If value was not TODO, then we save the present key to be used in the next iteration step as the previous key
previousKey = key;
}
}
}
}
答案 1 :(得分:1)
分析输入的json结构,您可以检测到关键的对象数组属于fields
属性。
使用以下方法:
var jsonData = '{"semantics":[{"englishLabel":"Quiz introduction","fields":[{"englishLabel":"Display introduction"},{"englishDefault":"Start Quiz","default":"TODO"}]}]}';
jsonData = JSON.parse(jsonData);
jsonData['semantics'][0]['fields'].forEach(function(o){
o['default'] && o['default'] === 'TODO' && (o['default'] = o['englishDefault']);
})
console.log(JSON.stringify(jsonData, 0, 4))
&#13;
答案 2 :(得分:0)
我读了你之前的问题,以便更好地理解你的意思,我相信这就是你正在寻找的。 p>
// Assign json to a variable so we can mutate it using JS
var data = {
"semantics": [
{
"englishLabel": "Quiz introduction",
"fields": [
{
"englishLabel": "Display introduction",
},
{
"englishDefault": "Start Quiz",
"default": "TODO"
}
]
}
]
};
// Loop over semantics and then fields to find the default values with TODO
// Replace by simply assigning the new value
data.semantics.forEach(function(semantic) {
semantic.fields.forEach(function(field) {
if (field.default === 'TODO')
field.default = field.englishDefault;
});
});
答案 3 :(得分:0)
你可以试试json stringify并替换方法
var js_replace = {
"semantics": [
{
"englishLabel": "Quiz introduction",
"fields": [
{
"englishLabel": "Display introduction",
},
{
"englishDefault": "Start Quiz",
"default": "TODO"
}
]
}
]
};
var data= JSON.stringify(js_replace).replace(/TODO/g, '"REPLACETHIS"');
console.log(data);
答案 4 :(得分:0)
我为做疯狂的缩进而道歉但是当我在控制台工作时它会有所帮助。 JSON.stringify是(ab)用于其对象行走。当其中一个兄弟姐妹做的时候,我抓住第一个没有'TODO'值的兄弟姐妹......选择'todo'之前的那个兄弟是很困难的,因为它是一张地图而不是一个阵列地图正式“有一个'之前'不要做字符串操作。这就是你这样做的方式。
请注意,我正在改变传递给deToDoify的对象,同时请注意,这是一般用途,无论“TODO”值在何处,都会彻底改变任何结构。
const deToDoify = x =>
{ JSON.stringify
(x,
(k,v) =>
{ const keys = Object.keys( v )
let toDude;
const check = keys.some
( a=> ((v[a] == 'TODO') && (toDude=a,1) ))
if ( check )
{ keys.some
( a => ((v[a] !== 'TODO') && (v[toDude] = v[a],1) )) }
return v } )
return x }
deToDoify(
{
"semantics": [
{
"englishLabel": "Quiz introduction",
"fields": [
{
"englishLabel": "Display introduction",
},
{
"englishDefault": "Start Quiz",
"default": "TODO"
}
]
}
]
})