2013-04-04 89 views
-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数据的树是:

enter image description here

我经历了所有的节点要循环并提取维护其父级子级别的所有数据的“id”。我怎样才能做到这一点使用递归函数。

这个想法是解析ruby中的json结构。

+1

你说的 “父数据” 是指? – sawa 2013-04-04 04:43:43

+0

即父母ID。 – user456064 2013-04-04 05:02:22

+2

更新您的问题,然后将该数组作为结果添加到该数据样本中,然后我会在5或10分钟内为您提供代码。不要删除问题,它是一个有效的问题,我很乐意为您提供帮助。 – rorra 2013-04-04 05:13:12

回答

1

我刚刚编写了一个节点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); 

你可以把到一个文件中,并与节点执行它(通过下载与强调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 
+0

可以在其他服务器端语言中完成,而不是使用JavaScript。 – user456064 2013-04-04 06:37:31

+0

红宝石?或任何其他语言? – rorra 2013-04-04 06:47:17

+0

红宝石会更好:) – user456064 2013-04-04 06:54:06