Javascript 根据父项和项id重建或重建现有JSON

Javascript 根据父项和项id重建或重建现有JSON,javascript,jquery,json,Javascript,Jquery,Json,我从表值生成JSON数组,并在表中存储Id、父Id和数据以及其他一些值。如果没有任何父项,则父项id将为空,如果是,则将引用父项id [{"state":"open","data":"Signature","attr": {"id":0,"item_id":2,"parent_id":0},"children":[{"data":"or replace","attr": {"id":1,"item_id":3,"parent_id":2}}]},{"state":"open","data":"P

我从表值生成JSON数组,并在表中存储Id、父Id和数据以及其他一些值。如果没有任何父项,则父项id将为空,如果是,则将引用父项id

[{"state":"open","data":"Signature","attr":
{"id":0,"item_id":2,"parent_id":0},"children":[{"data":"or replace","attr":
{"id":1,"item_id":3,"parent_id":2}}]},{"state":"open","data":"Parameter","attr":
{"id":0,"item_id":4,"parent_id":0},"children":[{"data":"in parameter","attr":
{"id":3,"item_id":5,"parent_id":4}},{"data":"in out parameter","attr":
{"id":4,"item_id":6,"parent_id":4}}]},{"state":"open","data":"Mandatory Block","attr":
{"id":0,"item_id":7,"parent_id":0},"children":[{"data":"validate Exit condition for loop","attr":{"id":8,"item_id":8,"parent_id":7}},{"data":"validate exception","attr":
{"id":7,"item_id":9,"parent_id":7}}]},{"state":"open","data":"parent","attr":
{"id":0,"item_id":10,"parent_id":7},"children":[{"data":"parent_CHILD","attr":
{"id":2,"item_id":11,"parent_id":10}},{"data":"parent_CHILD1","attr":
{"id":5,"item_id":12,"parent_id":10}}]}]
从上面的JSON中,您可以看到parent_id=0表示它没有父对象。现在,我想根据parent\u id和Item\u id重建它,这意味着如果parent\u id=0,那么就根据Item\u id对它进行排序

帮我弄清楚

更新

我试着跟随,但没能得到想要的结果

<script src='js/linq.js'></script>
<script src='js/jquery.js'></script>
<script>


var dataArray = $.parseJSON([{"state":"open","data":"Signature","attr":
{"id":0,"item_id":2,"parent_id":0},"children":[{"data":"or replace","attr":
{"id":1,"item_id":3,"parent_id":2}}]},{"state":"open","data":"Parameter","attr":
{"id":0,"item_id":4,"parent_id":0},"children":[{"data":"in parameter","attr":
{"id":3,"item_id":5,"parent_id":4}},{"data":"in out parameter","attr":
{"id":4,"item_id":6,"parent_id":4}}]},{"state":"open","data":"Mandatory Block","attr":
{"id":0,"item_id":7,"parent_id":0},"children":[{"data":"validate Exit condition for loop","attr":{"id":8,"item_id":8,"parent_id":7}},{"data":"validate exception","attr":
{"id":7,"item_id":9,"parent_id":7}}]},{"state":"open","data":"parent","attr":
{"id":0,"item_id":10,"parent_id":7},"children":[{"data":"parent_CHILD","attr":
{"id":2,"item_id":11,"parent_id":10}},{"data":"parent_CHILD1","attr":
{"id":5,"item_id":12,"parent_id":10}}]}]);
var sorted = Enumerable.From(dataArray)
    .OrderBy(function(x) {
        return x.parent_id;
    })
    .ThenBy(function(x) {
        return x.item_id;
    })
    .ToArray();
console.log(sorted);
console.log(dataArray);
</script>


再次更新,并具体说明您想要的结果。什么东西排序不正确,为什么?
var dataArray = $.parseJSON(dataInYourQuestion);
var sorted = Enumerable.From(dataArray)
    .OrderBy(function(x) {
        return x.parent_id;
    })
    .ThenBy(function(x) {
        return x.item_id;
    })
    .ToArray();