0

以下のような出力にシリアル化されるネストされたリストを持つjqueryサードパーティアプリケーションがあります。リストには常に 2 レベルしかありませんが、それを解析する方法がわかりません。コールドフュージョンを使用しています。

リストは次のようになります (視覚化のために改行が追加されています。区切り文字として使用することはできません)。

[{"id":1},
{"id":197,"children":[{"id":198},{"id":199},{"id":200}]},
{"id":2,"children":[{"id":3},{"id":4},{"id":143},{"id":6},{"id":5},{"id":7},{"id":8},{"id":9},{"id":10},{"id":11},{"id":12}]},
{"id":15,"children":[{"id":17},{"id":190},{"id":191},{"id":131},{"id":16},{"id":142},{"id":124}]},
{"id":114}]

各IDをループして、次のようにparentidとchildidに変換したい:

id:1   parentid: 10000 childid: 10000
id:197 parentid: 10001 childid: 10000 (new parent)
id:198 parentid: 10001 childid: 10001 (first child)
id:199 parentid: 10001 childid: 10002 (second child)
id:200 parentid: 10001 childid: 10003 (third child)
id:2   parentid: 10002 childid: 10000 (new parent)

... 等々

あなたの助けに感謝します。


編集:私がやろうとしていることのコードは以下のとおりです

<script type="text/javascript">
$(document).ready(
    function()
    {
    var updateOutput = function(e)
    {
        var list   = e.length ? e : $(e.target),
            output = list.data('output');
        if (window.JSON) {
            output.val(window.JSON.stringify(list.nestable('serialize')));//, null, 2));
        } else {
            output.val('JSON browser support required for this demo.');
        }
    };

//this is where i need help     
var postOutline = function(output){
        $.post("something.cfc", {
        method: 'getoutline',
        output: output
        }); 
    };

    // activate Nestable for list 1
    $('#nestable3').nestable({
        group: 1
    })
   // .on('change', updateOutput);
    .on('change', postOutline);

    // output initial serialised data
    updateOutput($('#nestable3').data('output', $('#nestable-output')));



    }
);
</script>
4

1 に答える 1

1

を使用するだけですdeserializeJson()。手で解析する必要はありません。ドキュメントから:

説明 JSON (JavaScript Object Notation) 文字列データ表現を、CFML 構造体や配列などの CFML データに変換します。

そこからは、通常の CFML を使用して好きなように処理するだけです。

データ構造にあるため、各 ID の子を見つけるのは簡単です。

残念ながら、データ構造は親情報を抽出するには理想的ではありません。

私が考えることができる最も便利な方法は、structFindValue() を使用して現在の ID のすべての出現を見つけ、それをループして、一致が子孫の子を持つエントリを見つけることです。それらの子の親 ID になります (それが理にかなっている場合)。

(structFindValue() では十分な情報が得られないため、上記の最初の提案は機能しません)。

次のようなことをして、これをブルートフォースする必要があります。

array = deserializeJson(json); // json is your data from the client

for (childElement in array){
    childId = childElement.id;
    for (parentElement in array){
        if (structKeyExists(parentElement, "children")){ // not all of them have children
            if (arrayFind(parentElement.children, {id=childId})){
                writeOutput("Parent of #childId# is #parentElement.id#<br>");
            }
        }
    }
}

明らかに、それは必要なものに対する正確な解決策ではありませんが、親を検索するためのテクニックを示しています。他の誰かが、それを実行するためのよりハムフィストされていない方法を思いつくことができるかもしれません.

于 2013-03-29T02:48:26.897 に答える