如何查找没有键名的嵌套 json 对象的“位置”

问题描述 投票:0回答:3

我有一个json对象,像这样,它是一个嵌套的json对象:

{
    "9-10": {
        "users": {
            "9": {
                "userID": 9,
                "name": "Cunlay Zheng",
                "avatarURL": "{\"small\":\"http://bs-staging.moselo.com/images/users/small/user9-1492746734\",\"medium\":\"http://bs-staging.moselo.com/images/users/medium/user9-1492746734\",\"large\":\"http://bs-staging.moselo.com/images/users/large/user9-1492746734\"}",
                "roomID": "9-10",
                "token": "0c4ea3da77d3c98107fd11c0c7c84ad8",
                "socketID": "/moselo#Xa3cWnM4kwQkpijfAAAD"
            },
            "10": {
                "userID": 10,
                "name": "Dominic Vedericho",
                "avatarURL": "{\"small\":\"http://bs-staging.moselo.com/images/users/small/user10-1492747647\",\"medium\":\"http://bs-staging.moselo.com/images/users/medium/user10-1492747647\",\"large\":\"http://bs-staging.moselo.com/images/users/large/user10-1492747647\"}",
                "roomID": "9-10",
                "token": "7f206d64fdfc71af4a783ab47516ef60",
                "socketID": "/moselo#BW8boMD4rA1dhlCzAAAE"
            }
        }
    },
      "11-12": {
        "users": {
            "9": {
                "userID": 11,
                "name": "Cunlay Zheng",
                "avatarURL": "{\"small\":\"http://bs-staging.moselo.com/images/users/small/user9-1492746734\",\"medium\":\"http://bs-staging.moselo.com/images/users/medium/user9-1492746734\",\"large\":\"http://bs-staging.moselo.com/images/users/large/user9-1492746734\"}",
                "roomID": "9-10",
                "token": "0c4ea3da77d3c98107fd11c0c7c84ad8",
                "socketID": "/moselo#Xa3cWnM4kwQkpijfAAAD"
            },
            "10": {
                "userID": 12,
                "name": "Dominic Vedericho",
                "avatarURL": "{\"small\":\"http://bs-staging.moselo.com/images/users/small/user10-1492747647\",\"medium\":\"http://bs-staging.moselo.com/images/users/medium/user10-1492747647\",\"large\":\"http://bs-staging.moselo.com/images/users/large/user10-1492747647\"}",
                "roomID": "9-10",
                "token": "7f206d64fdfc71af4a783ab47516ef60",
                "socketID": "/moselo#BW8boMD4rA1dhlCzAAAE"
            }
        }
    }
}

尝试使用 _filter 和 _find 如下所示,但没有运气

 result = _.find(data, function(d) {
     return  d[0] === "9-10"

    //also tried this
    // return d._id === "9-10"

}); 

基本上我想用这个键“9-10”找到一个对象, 我用谷歌找到了一些解决办法,但没有任何效果。

需要一些建议。

json lodash
3个回答
1
投票

它是一个对象,所以你不应该使用索引,例如

0
。您应该能够简单地使用密钥,就像这样 -

result = d["9-10"]

0
投票

我已经解决了这个问题,通过这种方法,我不确定这是否是最好的方法,但这个解决方案是有效的。

   var r = _.pickBy(data, function(value, key) {
                    return _.startsWith(key, "9-10");
                });

感谢您的帮助。


0
投票

试试这个

result = _.get(data,'9-10')
result = _.get(data,'9-10', defaultValue)

以防万一您需要获取其他值:

users = _.get(data,['9-10','users']);

nine = _.get(data,['9-10','users', '9']);

很确定你明白了。

这里是 _.get 文档的链接:https://lodash.com/docs/#get

这是一个工作示例:

const data = {
    "9-10": {
        "users": {
            "9": {
                "userID": 9,
                "name": "Cunlay Zheng",
                "avatarURL": "{\"small\":\"http://bs-staging.moselo.com/images/users/small/user9-1492746734\",\"medium\":\"http://bs-staging.moselo.com/images/users/medium/user9-1492746734\",\"large\":\"http://bs-staging.moselo.com/images/users/large/user9-1492746734\"}",
                "roomID": "9-10",
                "token": "0c4ea3da77d3c98107fd11c0c7c84ad8",
                "socketID": "/moselo#Xa3cWnM4kwQkpijfAAAD"
            },
            "10": {
                "userID": 10,
                "name": "Dominic Vedericho",
                "avatarURL": "{\"small\":\"http://bs-staging.moselo.com/images/users/small/user10-1492747647\",\"medium\":\"http://bs-staging.moselo.com/images/users/medium/user10-1492747647\",\"large\":\"http://bs-staging.moselo.com/images/users/large/user10-1492747647\"}",
                "roomID": "9-10",
                "token": "7f206d64fdfc71af4a783ab47516ef60",
                "socketID": "/moselo#BW8boMD4rA1dhlCzAAAE"
            }
        }
    },
      "11-12": {
        "users": {
            "9": {
                "userID": 11,
                "name": "Cunlay Zheng",
                "avatarURL": "{\"small\":\"http://bs-staging.moselo.com/images/users/small/user9-1492746734\",\"medium\":\"http://bs-staging.moselo.com/images/users/medium/user9-1492746734\",\"large\":\"http://bs-staging.moselo.com/images/users/large/user9-1492746734\"}",
                "roomID": "9-10",
                "token": "0c4ea3da77d3c98107fd11c0c7c84ad8",
                "socketID": "/moselo#Xa3cWnM4kwQkpijfAAAD"
            },
            "10": {
                "userID": 12,
                "name": "Dominic Vedericho",
                "avatarURL": "{\"small\":\"http://bs-staging.moselo.com/images/users/small/user10-1492747647\",\"medium\":\"http://bs-staging.moselo.com/images/users/medium/user10-1492747647\",\"large\":\"http://bs-staging.moselo.com/images/users/large/user10-1492747647\"}",
                "roomID": "9-10",
                "token": "7f206d64fdfc71af4a783ab47516ef60",
                "socketID": "/moselo#BW8boMD4rA1dhlCzAAAE"
            }
        }
    }
}

// Using lodash 4.17.21
const result = _.get(data,'9-10');

console.log(result);
<script src="https://cdn.jsdelivr.net/npm/[email protected]/lodash.min.js"></script>

© www.soinside.com 2019 - 2024. All rights reserved.