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 对象表示法)字符串数据表示转换为 CFML 数据,例如 CFML 结构或数组。

从那里你只需要使用你常用的 CFML 来处理它。

查找每个 ID 的子代很容易,因为它在数据结构中。

不幸的是,数据结构对于提取父信息并不理想。

我能想到的最方便的方法是使用 structFindValue() 查找当前 ID 的所有出现,然后循环查找匹配具有后代子项的条目“。然后遍历到 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 回答