javascript - 关于json中获取多个key-value对中多层嵌套key的name
ringa_lee
ringa_lee 2017-06-12 09:22:48
[Python讨论组]
{
  "RuntimeSources": {
    "flask-webapp": {
      "eb-flask1.3": {
        "s3url": ""
      }
    }
  },
  "DeploymentId": 4,
  "Serial": 4
}

有这样一个json文件, 我现在我需要提取出flask-webapp这个key的name,即flask-webapp这个字符串本身,我应该如何使用呢?使用Object.keys()的话我得到的是RuntimeSource,DeploymentId和Serial这三个key。
感觉自己描述的有些复杂,问题提炼一下就是:如何提取这个json文件的第一个key-value中的下一层key-value中的key(好像说的更复杂了。。希望能看懂吧)
用python或者javascript实现都可以

ringa_lee
ringa_lee

ringa_lee

全部回复(5)
黄舟
function getFirstKeyInLevel(json, level) {
    var levelNow = 0;
    var key;
    var obj = json;
    do {
        key = Object.keys(obj)[0];
        levelNow++;
        obj = obj[key];
    } while (key && levelNow < level);
    return key;
}
var json = {
    'RuntimeSources': {
        'flask-webapp': {
            'eb-flask1.3': {
                's3url': ''
            }
        }
    },
    'DeploymentId': 4,
    'Serial': 4
};

console.log(getFirstKeyInLevel(json, 1)); // RuntimeSources
console.log(getFirstKeyInLevel(json, 2)); // flask-webapp
console.log(getFirstKeyInLevel(json, 3)); // eb-flask1.3
console.log(getFirstKeyInLevel(json, 4)); // s3url
console.log(getFirstKeyInLevel(json, 5)); // undefined
世界只因有你
var object= {
          "RuntimeSources": {
            "flask-webapp": {
              "eb-flask1.3": {
                "s3url": ""
              }
            }
          },
          "DeploymentId": 4,
          "Serial": 4
        }
    for(i in object){
        console.log(Object.keys(object[i]));
        // console.log(object[i]);//Object {flask-webapp: Object} 执行四次
        for(k in object[i]){
            console.log(Object.keys(object[i][k]));
            // console.log(object[i][k]);//Object {eb-flask1.3: Object}
            for(s in object[i][k]){
                console.log(Object.keys(object[i][k][s]));
                //console.log(object[i][k][s])//Object {s3url: ""}
                for( f in object[i][k][s]){
                    console.log(Object.keys(object[i][k][f]))
                }
            }
        }
    }

执行到最后应该会抛出错误 Cannot convert undefined or null to object,这个没事儿

PHP中文网

如果是要用python实现的话,dict是一种散列表结构,就是说数据输入后按特征已经被散列了,有自己的顺序
如果你可以指定key的名字倒还可以获取,如果不能指定key的名字,那就做不到

data = {
  "RuntimeSources": {
    "flask-webapp": {
      "eb-flask1.3": {
        "s3url": ""
      }
    }
  },
  "DeploymentId": 4,
  "Serial": 4
}

print data['RuntimeSources']['flask-webapp']
print data['RuntimeSources'].values()[0]
世界只因有你

python 默认字典是无序的,但是可以用 OrderedDict 有序字典来实现。

def level_keys(order_dict, level):
    _level = 1
    if level == _level:
        return order_dict.get(order_dict.keys()[0]).keys()
    else:
        return level_keys(order_dict.get(order_dict.keys()[0]), level=level - 1)


def main(level=1):
    from collections import OrderedDict
    import json
    dict_str = """{
  "RuntimeSources": {
    "flask-webapp": {
      "eb-flask1.3": {
        "s3url": ""
      }
    }
  },
  "DeploymentId": 4,
  "Serial": 4
}"""
    order_dict = json.loads(s=dict_str, object_pairs_hook=OrderedDict)
    print(level_keys(order_dict, level))


if __name__ == '__main__':
    main(3)
曾经蜡笔没有小新
var json = JSON.parse('{  "RuntimeSources": {    "flask-webapp": {      "eb-flask1.3": {        "s3url": ""      }    }  },  "DeploymentId": 4,  "Serial": 4}');
for (t in json) { console.log(t); }

var test = Object.keys(json);
console.log(test[0]);
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号