gpt4 book ai didi

javascript - 递归的麻烦;解析 JSON

转载 作者:塔克拉玛干 更新时间:2023-11-02 20:37:52 27 4
gpt4 key购买 nike

我有一个像这样的 json 对象:

[{
"thing": "Top",
"data": {
"childs": [{
"thing": "a",
"data": {
"text": "sdfgdg1",
"morestuff": {
"thing": "Top",
"data": {
"childs": [{
"thing": "a",
"data": {
"text": "sdfg2",
"morestuff": "",
}
},
{
"thing": "a",
"data": {
"text": "gfhjfghj3",
"morestuff": {
"thing": "Top",
"data": {
"childs": [{
"thing": "a",
"data": {
"text": "asdfsadf 2 4",
"morestuff": {
"thing": "Top",
"data": {
"childs": [{
"thing": "a",
"data": {
"text": "asdfsadf 2 5",
"morestuff": {
"thing": "Top",
"data": {
"childs": {
"thing": "a",
"data": {
"text": "asdfsadf 2 6",
"morestuff": "",
},
"data": {
"text": "asdfsadf 2 6",
"morestuff": "",
}
},
}
},
}
}],
}
},
}
}],
}
},
}
}],
}
},
}
},
{
"thing": "a",
"data": {
"text": "asdfasd1 2",
"morestuff": {
"thing": "Top",
"data": {
"childs": [{
"thing": "a",
"data": {
"text": "asdfsadf 2 3",
"morestuff": "",
}
}],
}
},
}
},
{
"thing": "a",
"data": {
"text": "dfghfdgh 4",
"morestuff": "",
}
}],
}
}]

...我正在尝试遍历它并获得“文本”对象的总数。

我似乎无法让递归工作。我想我缺少对 json 和递归的基本理解。

经过几天的变化之后:

count=0;
c2=0;
c3=0;
function ra(arr){
//console.log(arr.data.morestuff)
if(arr!==undefined && arr.data && arr.data.morestuff===""){
c3++;

}else if((arr && arr.data && typeof arr.data.morestuff==="object")){
if(arr.data.morestuff.data.childs.length>1){
for(var w=0;w<arr.data.morestuff.data.childs.length;w++){
count+=ra(arr.data.morestuff.data.childs[w])
}
}else{
count+=ra(arr.data.morestuff.data.childs[0])
}
}
return(c3)
}
countn=0;//top morestuff with no morestuff
tot=0;
function reps(obj){
tot=obj.data.childs.length;
console.log("tot="+tot)
for(var x=0;x<tot;x++){
tot+=ra(obj.data.childs[x])
c3=0
if(tot>1000){//trying to prevent a runaway loop somehwere
break;
}
}
console.log(tot)
}

reps(json[0]);

我得出的结论是,我就是不知道。我得到了各种不同的结果;有些人通过将 ra 方法的返回值加在一起来接近,但没有任何一致的(即错误的)并且总是至少有一些偏差。

JSON 是一致的,尽管有未知数量的 child 和 child 的 child ,这就是我寻求递归的原因。

这是一个 fiddle :http://jsfiddle.net/CULVx/

理想情况下,我想计算每个文本对象、它的相对位置以及它拥有的子对象的数量,但我想如果我能让计数工作的话,我可以把这些东西放到一个数组中。 ..

注意:我试过 jsonParse 和其他库都无济于事。特别是,当尝试在此 json 上使用它时,jsonParse 会抛出 Object has no method "match" 错误。

最佳答案

如果您只想要所有 "text" 属性在任何 深度,那么这应该足够了:http://jsfiddle.net/QbpqT/ .

不过,您有两次属性键(“数据” 在最嵌套的对象中)。由于一个对象不能包含两个具有相同键的属性,所以你实际上有 9 个 "text" 属性;不是 10。

var count = 0;

function iterate(obj) {
for(var key in obj) { // iterate, `key` is the property key
var elem = obj[key]; // `obj[key]` is the value

if(key === "text") { // found "text" property
count++;
}

if(typeof elem === "object") { // is an object (plain object or array),
// so contains children
iterate(elem); // call recursively
}
}
}

iterate(data); // start iterating the topmost element (`data`)

console.log(count); // 9

关于javascript - 递归的麻烦;解析 JSON,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8466065/

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