【问题标题】:Iteration through array data遍历数组数据
【发布时间】:2013-03-26 00:28:18
【问题描述】:

我有一个 JSON 数据,格式如下:

 [{
        "id": 1,
        "children": [{
                "id": 7,
                "children": [{
                        "id": 8,
                        "children": [{
                                "id": 4
                            }, {
                                "id": 5
                            }, {
                                "id": 11
                            }
                        ]
                    }, {
                        "id": 9
                    }
                ]
            }, {
                "id": 6
            }, {
                "id": 10
            }
        ]
    }, {
        "id": 2,
        "children": [{
                "id": 3
            }, {
                "id": 12
            }
        ]
    }, {
        "id": 13
    }
]

这个 JSON 数据的树是:

我想遍历所有节点并提取维护其父子层次结构的所有数据的“id”。我如何使用递归函数来做到这一点。

思路是在ruby中解析json结构。

【问题讨论】:

  • 你的意思是“父数据”?
  • 更新您的问题,并使用该数据样本添加您想要的数组作为结果,我会在 5 或 10 分钟内为您提供代码。不要删除问题,这是一个有效的问题,我很乐意为您提供帮助。
  • 你实际上需要写一个javascript迭代算法来做到这一点,我晚饭后给你写一个;)

标签: ruby json recursion foreach


【解决方案1】:

我刚刚编写了一个node js代码,你仍然可以在js中让它在浏览器上运行,但是你需要下载下划线库here

_und = require('underscore');

data = [{
        "id": 1,
        "children": [{
                "id": 7,
                "children": [{
                        "id": 8,
                        "children": [{
                                "id": 4
                            }, {
                                "id": 5
                            }, {
                                "id": 11
                            }
                        ]
                    }, {
                        "id": 9
                    }
                ]
            }, {
                "id": 6
            }, {
                "id": 10
            }
        ]
    }, {
        "id": 2,
        "children": [{
                "id": 3
            }, {
                "id": 12
            }
        ]
    }, {
        "id": 13
    }
]

function parse_tree_2(n) {
    return(_und.map(n, parse_tree));
}

function parse_tree(n) {
    if (n['children']) {
        return({id: n['id'], children: parse_tree_2(n['children'])});
    } else {
        return({id: n['id']});
    }
}

result = _und.map(data, parse_tree);

console.log("Result: %j", result);

你可以把它放到一个文件中,然后用 node 执行它(通过 nmp install node 下载下划线)。

在普通的 js 上会是这样的:

<script type="text/javascript" src="http://underscorejs.org/underscore-min.js"></script>
<script type="text/javascript">

data = [{
        "id": 1,
        "children": [{
                "id": 7,
                "children": [{
                        "id": 8,
                        "children": [{
                                "id": 4
                            }, {
                                "id": 5
                            }, {
                                "id": 11
                            }
                        ]
                    }, {
                        "id": 9
                    }
                ]
            }, {
                "id": 6
            }, {
                "id": 10
            }
        ]
    }, {
        "id": 2,
        "children": [{
                "id": 3
            }, {
                "id": 12
            }
        ]
    }, {
        "id": 13
    }
]

function parse_tree_2(n) {
    return(_.map(n, parse_tree));
}

function parse_tree(n) {
    if (n['children']) {
        return({id: n['id'], children: parse_tree_2(n['children'])});
    } else {
        return({id: n['id']});
    }
}

result = _.map(data, parse_tree);

console.log("Result: %j", result);

</script>

Ruby 代码:

require 'json'

data = <<EOF
[{
        "id": 1,
        "children": [{
                "id": 7,
                "children": [{
                        "id": 8,
                        "children": [{
                                "id": 4
                            }, {
                                "id": 5
                            }, {
                                "id": 11
                            }
                        ]
                    }, {
                        "id": 9
                    }
                ]
            }, {
                "id": 6
            }, {
                "id": 10
            }
        ]
    }, {
        "id": 2,
        "children": [{
                "id": 3
            }, {
                "id": 12
            }
        ]
    }, {
        "id": 13
    }
]
EOF

json = JSON.parse(data)

def parse_tree(n)
  if n["children"]
    {id: n["id"], children: n['children'].map {|c| parse_tree(c)} }
  else
    {id: n["id"]}
  end
end


result = json.map {|n| parse_tree(n) }

puts result

【讨论】:

  • 可以用其他服务器端语言而不是javascript来完成。
  • 红宝石?或任何其他语言?
  • 好的,让我知道它是否有效,如果有效,请记住选择我的答案作为正确答案,并给我一个积极的投票:)
  • 你好 rorra,你能用 ruby​​ 做吗?
  • 我做到了,检查我的代码的最后一部分,我用 ruby​​ 代码更新了答案
猜你喜欢
  • 2014-09-09
  • 1970-01-01
  • 1970-01-01
  • 2016-01-31
相关资源
最近更新 更多