Rumah  >  Soal Jawab  >  teks badan

javascript - Perihal mendapatkan nama berbilang kunci bersarang dalam berbilang pasangan nilai kunci dalam json

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

Terdapat fail json seperti itu Sekarang saya perlu mengekstrak flask-webapp这个key的name,即flask-webapp rentetan itu sendiri. Menggunakan Object.keys(), saya mendapat tiga kunci RuntimeSource, DeploymentId dan Serial.
Saya rasa penerangan saya agak rumit Untuk meringkaskan masalahnya ialah: cara mengekstrak kunci dalam lapisan nilai kunci seterusnya dalam nilai kunci pertama fail json ini (nampaknya lebih rumit... Saya harap anda dapat memahaminya) )
Ia boleh dilaksanakan menggunakan python atau javascript

ringa_leeringa_lee2686 hari yang lalu841

membalas semua(6)saya akan balas

  • 黄舟

    黄舟2017-06-12 09:24:48

    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
    

    balas
    0
  • 漂亮男人

    漂亮男人2017-06-12 09:24:48

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

    Ini adalah data yang perlu diproses Soalan subjek harus dianggap sebagai subset yang betul dari soalan berikut
    (Masalahnya ialah selagi "flask-webapp" diperolehi)

    Ekstrak semua nama kunci objek daripada objek dan bentukkan tatasusunan

    Proses ini dipanggil sementara 铺平 flat Saya juga telah melaksanakan fungsi ini di sini untuk mendapatkan penyelesaian ini.

    flat(o); 
    // => 
    // ["RuntimeSources", "flask-webapp", "eb-flask1.3", "s3url", "DeploymentId", "Serial"]

    Gunakan Object.keys untuk menyelesaikan masalah

    Object.keys Keupayaan untuk mendapatkan nama kunci atribut objek peringkat pertama yang terbilang

    Gunakan ciri seperti ini untuk menulis fungsi rekursif:

    var flat = o => {
        // 当层键名 
        if (typeof o !== 'object') return []; 
        
        var keys = Object.keys(o); 
        
        return keys.reduce((acc, cur) => {
            return acc.concat( flat(o[cur]) ); 
        }, keys); 
    }

    ScreenShot

    var log = (item, idx) => {
        console.group(`第 ${idx + 1} 个元素`)
        console.log('值:', item); 
        console.groupEnd(); 
    }
    flat(o).forEach(log); 


    Secara khusus anda perlukan flask-webapp nama kunci ini:

    var res = flat(o).filter(e => e === 'flask-webapp'); 
    console.log(res); 
    // => 
    // ["flask-webapp"] 

    Gunakan JSON.stringify untuk menyelesaikan masalah

    JSON.stringify 可以把对象转化成 JSON字符串

    Sebagai contoh, JSON.stringify(o) boleh mendapatkan hasilnyaJSON.stringify(o) 可以得到结果
    "{"RuntimeSources":{"flask-webapp":{"eb-flask1.3":{"s3url":""}}},"DeploymentId":4,"Serial":4}"

    Teruskan pemerhatian dan anda akan dapati:

    JSON 中, :Yang sebelum

    ialah nama kunci

    冒号Bina elemen JSON ke dalam tatasusunan, dan kemudian pilih elemen sebelum

    .

    Fungsi alat

    // 把在 str 中的 willBeReplaced 替换为 toPlace
    var replaceAll = (str, willBeReplaced, toPlace) => {
        return str.split(willBeReplaced).join(toPlace)
    }
    
    // 把在 str 的全部 willBeCut 替换成 ''
    var cut = (str, willBeCut) => {
        return replaceAll(str, willBeCut, ''); 
    }
    flat

    pelaksanaan

    var flat = o => {
        var str = JSON.stringify(o); 
        
        return ['{', '}', ':', ','].reduce((acc, e) => {
            return replaceAll(acc, e, ` ${e} `); 
        }, str).split(' ').filter(e => e !== "").reduce((acc, cur, idx, its) => {
            if (cur === ':'){
                acc.push(its[idx - 1]); 
            }
            
            return acc;
        }, []).map(e => cut(e, '"', ''));  
    }

    Di atas bermaksud:

    { } : ,Pengurangan pertama menambah ruang sebelum dan selepas

    Kod sepadan

    // o 是待处理对象 
    let str = JSON.stringify(o); 
    
    var A = ['{', '}', ':', ','].reduce((acc, e) => {
        // 把 e 的两侧都补上一个空格 
        return replaceAll(acc, e, ` ${e} `); 
    }, str)

    Hasilnya begini:

    Str asal dari

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

    Selepas diproses, ia menjadi

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

    ADapatkan keputusan pertengahan

    Seterusnya

    AUntuk diuruskan di sini

    Kod sepadan:

    var B = ['{', '}', ':', ','].reduce((acc, e) => {
        return replaceAll(acc, e, ` ${e} `); 
    }, str).split(' ').filter(e => e !== "")
    A 转成中间数组 BTukar

    kepada tatasusunan perantaraan

    : (dari rentetan ke tatasusunan)

    Pengurangan terakhir dapat hasilnyaB

    Pemerhatian
    boleh membawa kepada kesimpulan

    JSON 中, :

    Yang sebelum
    ialah nama kunci

    冒号

    Tulis pengurangan akhir dengan sewajarnya: kumpulkan elemen sebelum
    untuk mendapatkan hasilnya

    ScreenShot

    🎜🎜

    balas
    0
  • 世界只因有你

    世界只因有你2017-06-12 09:24:48

    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]))
                    }
                }
            }
        }
    

    Ralat "Tidak boleh menukar yang tidak ditentukan atau null kepada objek" harus dilemparkan pada penghujung pelaksanaan

    balas
    0
  • PHP中文网

    PHP中文网2017-06-12 09:24:48

    Jika anda ingin melaksanakannya dalam python, dict adalah struktur jadual hash, yang bermaksud bahawa selepas data dimasukkan, ia telah dicincang mengikut ciri dan mempunyai susunannya sendiri
    Jika anda boleh menentukan nama kunci , anda masih boleh mendapatkannya Jika anda tidak dapat menentukannya, anda masih boleh mendapatkannya, maka ia tidak boleh dilakukan

    data = {
      "RuntimeSources": {
        "flask-webapp": {
          "eb-flask1.3": {
            "s3url": ""
          }
        }
      },
      "DeploymentId": 4,
      "Serial": 4
    }
    
    print data['RuntimeSources']['flask-webapp']
    print data['RuntimeSources'].values()[0]

    balas
    0
  • 世界只因有你

    世界只因有你2017-06-12 09:24:48

    Kamus lalai Python tidak tertib, tetapi ia boleh dilaksanakan menggunakan kamus pesanan 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)
    

    balas
    0
  • 曾经蜡笔没有小新

    曾经蜡笔没有小新2017-06-12 09:24:48

    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]);

    balas
    0
  • Batalbalas