-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」を抽出したいと考えています。再帰関数を使用してこれを行うにはどうすればよいですか。

アイデアは、ルビーで json 構造を解析することです。

4

1 に答える 1

1

ノードの js コードをコーディングしたところです。js を使用してブラウザーで動作させることはできますが、ここからアンダースコア ライブラリをダウンロードする必要があります。

_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>

ルビーコード:

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
于 2013-04-04T06:25:40.573 に答える