为了账号安全,请及时绑定邮箱和手机立即绑定

遍历JSON对象javascript

/ 猿问

遍历JSON对象javascript

慕容708150 2019-11-12 15:00:47

我很难找到一种以我想要的方式遍历此JSON对象的方法。我在这里只使用Javascript。


首先,这是对象


{

"dialog":

{

    "dialog_trunk_1":{

        "message": "This is just a JSON Test"

    },


    "dialog_trunk_2":{

        "message": "and a test of the second message"

    },


    "dialog_trunk_3":

    {

        "message": "This is a test of a bit longer text. Hopefully this will at the very least create 3 lines and trigger us to go on to another box. So we can test multi-box functionality, too."

    }

}

}

现在,我只是在尝试基本方法来访问此对象上的每个dialog_trunk。理想情况下,我想遍历该对象,并为每个主干显示其message值。


我已经尝试过使用for循环动态地生成dialog_trunk的名称/编号,但是我无法使用对象名称的字符串来访问该对象,因此我不确定从这里开始。


查看完整描述

3 回答

?
拉丁的传说

for..in为此使用循环。确保检查对象是否拥有属性,或者是否也显示所有继承的属性。一个例子是这样的:


var obj = {a: 1, b: 2};

for (var key in obj) {

  if (obj.hasOwnProperty(key)) {

    var val = obj[key];

    console.log(val);

  }

}

或者,如果您需要递归来遍历所有属性:


var obj = {a: 1, b: 2, c: {a: 1, b: 2}};

function walk(obj) {

  for (var key in obj) {

    if (obj.hasOwnProperty(key)) {

      var val = obj[key];

      console.log(val);

      walk(val);

    }

  }

}

walk(obj);


查看完整回答
反对 回复 2019-11-12
?
回首忆惘然

我的问题实际上是关于JSON对象的错误计划问题,而不是实际的逻辑问题。根据user2736012的建议,我最终要做的是按如下方式组织对象。


{

"dialog":

{

    "trunks":[

    {

        "trunk_id" : "1",

        "message": "This is just a JSON Test"

    },

    {

        "trunk_id" : "2",

        "message": "This is a test of a bit longer text. Hopefully this will at the very least create 3 lines and trigger us to go on to another box. So we can test multi-box functionality, too."

    }

    ]

}

}

那时,我能够根据对象的总数进行一个相当简单的for循环。


var totalMessages = Object.keys(messages.dialog.trunks).length;


    for ( var i = 0; i < totalMessages; i++)

    {

        console.log("ID: " + messages.dialog.trunks[i].trunk_id + " Message " + messages.dialog.trunks[i].message);

    }

但是,并非所有浏览器都支持我获取totalMessages的方法。对于我的项目,实际上并不重要,但是请注意,如果您选择使用与此类似的内容。


查看完整回答
反对 回复 2019-11-12
?
45度呼吸

这是我的递归方法:


function visit(object) {

    if (isIterable(object)) {

        forEachIn(object, function (accessor, child) {

            visit(child);

        });

    }

    else {

        var value = object;

        console.log(value);

    }

}


function forEachIn(iterable, functionRef) {

    for (var accessor in iterable) {

        functionRef(accessor, iterable[accessor]);

    }

}


function isIterable(element) {

    return isArray(element) || isObject(element);

}


function isArray(element) {

    return element.constructor == Array;

}


function isObject(element) {

    return element.constructor == Object;

}


查看完整回答
反对 回复 2019-11-12

添加回答

回复

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信