gpt4 book ai didi

javascript - 使用字符串访问 json

转载 作者:行者123 更新时间:2023-11-28 19:16:28 25 4
gpt4 key购买 nike

我有一些 json :数据

我有一个如下所示的字符串构建:sections.1.subsections.0.items.0.itation.paragraph

我需要做的是操纵该字符串以便能够访问data中的该值。所以把它变成可用的东西:数据['章节'][1]['小节'][0]['项目'][0]['引文']['段落']

然后用它来更改数据中的值。所以:data['sections'][1]['subsections'][0]['items'][0]['itation']['paragraph'] = '新值'

我可以拆分 . 上的原始字符串,我认为可以让我到达某个地方,但我完全不确定如何重新使用这些部分允许我访问 data 中的该值。

谢谢!

最佳答案

我仍然不太清楚为什么要以这种方式处理 JSON,但如果必须这样做,那么您将需要使用递归来访问数据。假设我正确映射了您的对象,下面的示例应该为您提供执行此操作的方法:

var data = {
sections: [
{
subsections: []
},
{
subsections: [
{
items: [
{
citation: {
paragraph: "Citation by Warlock"
}
}
]
}
]
}
]
};

var string = "sections.1.subsections.0.items.0.citation.paragraph",
parts = string.split('.');

function getValue(tree, index) {
if(index < (parts.length - 1)) {
return getValue(tree[parts[index]], index + 1);
} else {
return tree[parts[index]];
}
}

function setValue(tree, index, newValue) {
if(index < (parts.length - 1)) {
setValue(tree[parts[index]], index + 1, newValue);
} else {
tree[parts[index]] = newValue;
}
}

alert(getValue(data, 0));
setValue(data, 0, "New Citation By Warlock");
alert(getValue(data, 0));

其想法是,getValue(...); 函数深入 JSON 一层,然后递归调用自身。这允许一次一步地访问数据,直到检索到最后一部分。然后通过之前所有函数调用中的递归返回该值。

同样的想法也适用于设置值。 setValue(...); 函数一次进入 JSON 一层,传递要设置的新值,直到到达最后一个嵌套层。然后为指定的属性设置该值。

编辑:

更好的实现是将 parts 数组传递到 getValue(...);setValue(...); 消除外部依赖的功能。然后,在函数内移动数组的数据值以逐步遍历嵌套层。这消除了基于原始数组值的索引跟踪的需要:

var data = {
sections: [
{
subsections: []
},
{
subsections: [
{
items: [
{
citation: {
paragraph: "Citation by Warlock"
}
}
]
}
]
}
]
};


var string = "sections.1.subsections.0.items.0.citation.paragraph",
parts = string.split('.');

function getValue(temp, tree) {
if(temp.length > 1) {
tree = tree[temp[0]];
temp.shift();
return getValue(temp, tree);
} else {
return tree[temp[0]];
}
}

function setValue(temp, tree, newValue) {
if(temp.length > 1) {
tree = tree[temp[0]];
temp.shift();
setValue(temp, tree, newValue);
} else {
tree[temp[0]] = newValue;
}
}

alert(getValue(parts, data));
setValue(parts, data, "New Citation By Warlock");
alert(getValue(parts, data));

关于javascript - 使用字符串访问 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29705687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com