javascript - 遍历 JSON 树并操作其数据/结构

标签 javascript jquery json

我正在尝试创建一个可以遍历 JSON 树并更改其数据/结构的函数。我设法让它遍历到每个节点并读取数据,但坚持更改其数据/结构部分。

function jsonTraverser(tree){
    $.each(tree, function(index, val){
        if(val.tag == 'button'){
            delete val[index];
        }
        if(val.children){
            jsonTraverser(val.children);
        }
    })
}
jsonTraverser(json_obj);

从上面的代码中,它应该删除标签等于按钮的 JSON 节点。虽然它似乎有效,但它不会删除节点,而更改其标签却可以正常工作。您有解决这个问题的办法吗?

PS:如果您需要 JSON 树的示例,这里就是。

[
  {"tag":"div","id":"0","class":"sgph","children":[
    {"tag":"div","data-scoretype":"","class":"sgi","id":"1","children":[
      {"tag":"button","data-btnrole":"satis_group","class":"up","html":"ขึ้น"},
      {"tag":"button","data-btnrole":"satis_group","class":"down","html":"ลง"},
      {"tag":"button","data-btnrole":"satis_group","class":"edit","html":"เปลี่ยนกลุ่ม"},
      {"tag":"button","data-btnrole":"satis_group","class":"del","html":"ลบกลุ่ม"}
    ]},
    {"tag":"div","class":"scph","children":[
      {"tag":"button","data-btnrole":"score_type","class":"add","html":"เกณฑ์การให้คะแนน"}
    ]},
    {"tag":"div","class":"stph","children":[
      {"tag":"div","class":"sti","id":"3","children":[
          {"tag":"button","data-btnrole":"satis_topics","class":"up","html":"ขึ้น"},
          {"tag":"button","data-btnrole":"satis_topics","class":"down","html":"ลง"},
          {"tag":"button","data-btnrole":"satis_topics","class":"edit","html":"เปลี่ยนหัวข้อ"},
          {"tag":"button","data-btnrole":"satis_topics","class":"del","html":"ลบหัวข้อ"}
        ]},
      {"tag":"button","data-btnrole":"satis_topics","class":"add","html":"เพิ่มหัวข้อ"}
    ]}
  ]},
  {"tag":"div","id":"1","class":"sgph","children":[
    {"tag":"button","data-btnrole":"satis_group","class":"add","html":"เพิ่มกลุ่ม"}
  ]}
]  

最佳答案

您拼写错误了一些变量名称。例如,“v”应该是“val”。 jsonTraverse 还应该从树中删除,而不是从 val 中删除,因为树保存着子级列表。

function jsonTraverser(tree){
    $.each(tree, function(index, val){
        if(val.tag == 'button'){
            delete tree[index];
        }
        if(val.children){
            jsonTraverser(val.children);
        }
    })
}

请注意,您必须处理根本身具有标签“button”的情况。

关于javascript - 遍历 JSON 树并操作其数据/结构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26625692/

相关文章:

php - 如何在 PHP 中将此数组转换为 JSON

javascript - 我可以使用 JSON 数组作为小型数据库吗?

javascript - jQuery BlockUI 元素阻止在 Chrome 上不起作用

javascript - 即使我包含了他们指示我们做的所有库,Summernote 也无法工作

javascript - 无法使用 jquery 和 php $_GET 导出 html 表

javascript - 使用 jquery 根据选中或未选中的复选框显示跨度标签

javascript - 导航 JSON 对象

python - Pandas Dataframe 到 JSON 层次结构

javascript - div 变换后垂直定位内容

java - RESTful Web 服务使用 JSON 上传/下载大数据