js解析多层嵌套json数据,递归调用

发布于 2022-09-05 03:12:37 字数 1885 浏览 27 评论 0

需要处理接口返回的json数据,转为Easyui Tree可以接收的数据格式,怎么处理多层的json数据,json的数据返回大小不一定,属性也有变化,结构类似,只有@desc是根目录

例子:

{
    "srvcfg": {
        "tokenswitch": {
            "token_switch": {
                "#text": "0",
                "@desc": "切换开关"
            },
            "@desc": "token切换"
        },
        "commoncfg": {
            "srvtype": {
                "count": {
                    "#text": "1",
                    "@desc": "数量"
                },
                "srvtypeid1": {
                    "#text": "28900",
                    "@desc": "类型"
                },
                "@desc": "SrvTypeID的数量"
            },
            "binanry_msg_queue": {
                "count": {
                    "#text": "2",
                    "@desc": "消息队列数量"
                },
                "queuenum1": {
                    "#text": "10000",
                    "@desc": "消息队列号"
                },
                "queuenum2": {
                    "#text": "20000",
                    "@desc": "消息队列最小长度"
                },
                "queuesize1": {
                    "#text": "300",
                    "@desc": "小消息队列"
                },
                "queuesize2": {
                    "#text": "10000",
                    "@desc": "消息队列最大长度"
                },
                "@desc": "消息队列配置"
            },
            "srv_pwd": {
                "count": {
                    "#text": "1",
                    "@desc": "约定密码数量"
                },
                "srvtypeid1": {
                    "#text": "28900",
                    "@desc": "端口"
                },
                "pwd1": {
                    "#text": "dtvspwd",
                    "@desc": "dtvs密码"
                },
                "@desc": "服务器之间约定的密码"
            },
            "@desc": "这是SrvTypeID规定"
        }
    }
}

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

两个我 2022-09-12 03:12:37
        function formatToTreedata(_data, str) {
            var obj = {};

            str = str || "";

            obj.str = str;
            obj.data = _data;

            if(!_data["#text"]) {
                obj.text = _data["@desc"] || "a";
                obj.children = [];
                for(var i in _data) {
                    if(i == "#text" || i == "@desc") continue;

                    obj.children.push(formatToTreedata(_data[i], str + "." + i));

                }
            } else {
                obj.text = _data["@desc"] + ":" + _data["#text"];
            }
            return obj;
        }
笨死的猪 2022-09-12 03:12:37

首先我们来分析一波,数据结构不管是什么样的,人去解析和机器去解析肯定是通过类型type。

  1. 是里面有type类型,如a、b、c什么的,如果是这样我们肯定可以对应不同的类型设置不同的解析方案。

  2. 没有一个明确的type来标识,用的是名字,name和age肯定是两种不同的东西,那我们就可以通过key来判断了。

对于json里面有不是命名规则的东西,我们可以用过[]来访问

clipboard.png

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文