Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/23.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby 通过数组数据的迭代_Ruby_Json_Recursion_Foreach - Fatal编程技术网

Ruby 通过数组数据的迭代

Ruby 通过数组数据的迭代,ruby,json,recursion,foreach,Ruby,Json,Recursion,Foreach,我有一个JSON数据,其格式如下: [{ "id": 1, "children": [{ "id": 7, "children": [{ "id": 8, "children": [{ "id": 4

我有一个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结构。

我刚刚编写了一个节点js代码,您仍然可以在js浏览器上使用它,但您需要下载下划线库

您可以将其放入一个文件中,并通过使用nmp安装节点下载下划线来使用节点执行它

在纯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

你说的父数据是什么意思?更新你的问题,并用该数据样本添加你想要的数组,我将在5到10分钟内给你代码。不要删除这个问题,这是一个有效的问题,我很乐意帮助你。你需要编写一个javascript迭代算法来实现这一点,我会在晚饭后为你写一个;可以用其他服务器端语言而不是使用javascript.ruby来完成吗?或者任何其他语言?好的,让我知道它是否有效,如果有效,记得选择我的答案作为正确答案,并给我一个肯定的投票:你好rorra,你能用ruby做吗?我做到了,检查我代码的最后一部分,我用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