我正在创建一个Web应用程序以执行json构建器。问题是我在javascript中有json,并且我有一个要更改元素位置的字符串。
对我来说,很容易访问它以进行循环,但是目标是更新或删除字段或数组。
我找到的唯一成功的解决方案是,这是一个可能的跟踪阵列长度被拆分的开关。
Json示例:
{
"name" : "Marcelino"
"id" : "${id}"
"poderes":
{
"poder1" : "volar"
"poder2" : "echar fuego"
"poder3" : "${poder4}"
"array":
{
"Elemento1" : "adada"
}
}
}
我要修改以下key:value对:
"poderes" : "volar"
我在变量中包含了踪迹:
trace = poderes-poder1
当前解决方案
...
let traceArray = trace.split("-");
...
switch(traceArray.length){
...
case1:
json[traceArray[0]]
...
case2:
json[traceArray[0]][traceArray[1]]
...
case3:
json[traceArray[0]][traceArray[1]][traceArray[2]]
...
寻找更好的解决方案。
非常感谢您的帮助。
答案 0 :(得分:1)
您可以通过保存最后一个键来减少路径,然后更改值或删除此属性。
function change(object, path, value) {
var keys = path.split('-'),
last = keys.pop(),
reference = keys.reduce((o, k) => o[k], object);
if (value === DELETE) {
delete reference[last];
} else {
reference[last] = value;
}
}
const DELETE = Symbol('delete this property');
var data = { name: "Marcelino", id: "${id}", poderes: { poder1: "volar", poder2: "echar fuego", poder3: "${poder4}", array: { Elemento1: "adada" } } },
target = 'poderes-poder1';
change(data, target, 'foo')
console.log(data);
change(data, target, DELETE);
console.log(data);
.as-console-wrapper { max-height: 100% !important; top: 0; }
答案 1 :(得分:0)
我认为您可以解决此问题的最好方法是将JSON读取到Javascript对象中,对其进行变异,然后将其转换回JSON:
const hero = JSON.parse(yourJsonString);
hero.poderes.poder1 = "invisibility";
const outputJson = JSON.strigify(hero);