日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術(shù)文章
文章詳情頁

javascript - 關(guān)于json中獲取多個(gè)key-value對(duì)中多層嵌套key的name

瀏覽:369日期:2023-10-12 13:52:48

問題描述

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

有這樣一個(gè)json文件, 我現(xiàn)在我需要提取出flask-webapp這個(gè)key的name,即flask-webapp這個(gè)字符串本身,我應(yīng)該如何使用呢?使用Object.keys()的話我得到的是RuntimeSource,DeploymentId和Serial這三個(gè)key。感覺自己描述的有些復(fù)雜,問題提煉一下就是:如何提取這個(gè)json文件的第一個(gè)key-value中的下一層key-value中的key(好像說的更復(fù)雜了。。希望能看懂吧)用python或者javascript實(shí)現(xiàn)都可以

問題解答

回答1:

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)); // RuntimeSourcesconsole.log(getFirstKeyInLevel(json, 2)); // flask-webappconsole.log(getFirstKeyInLevel(json, 3)); // eb-flask1.3console.log(getFirstKeyInLevel(json, 4)); // s3urlconsole.log(getFirstKeyInLevel(json, 5)); // undefined回答2:

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

這是需要處理的數(shù)據(jù),題主的問題應(yīng)該可以看成下面問題的一個(gè)真子集 (問題是只要取得 'flask-webapp')

從對(duì)象里抽離出該對(duì)象的全部鍵名,并構(gòu)成一個(gè)數(shù)組

這個(gè)過程 暫且稱之為 鋪平 flat, 我這里也實(shí)現(xiàn)了這個(gè)函數(shù) 用于取得這個(gè)解。

flat(o); // => // ['RuntimeSources', 'flask-webapp', 'eb-flask1.3', 's3url', 'DeploymentId', 'Serial']利用 Object.keys 解決問題

Object.keys 能獲得可枚舉的第一層對(duì)象屬性鍵名

利用這樣的特性編寫遞歸函數(shù):

var flat = o => { // 當(dāng)層鍵名 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} 個(gè)元素`) console.log(’值:’, item); console.groupEnd(); }flat(o).forEach(log);

javascript - 關(guān)于json中獲取多個(gè)key-value對(duì)中多層嵌套key的name

特別地 你需要 flask-webapp 這個(gè)鍵名:

var res = flat(o).filter(e => e === ’flask-webapp’); console.log(res); // => // ['flask-webapp'] 利用 JSON.stringify 解決問題

JSON.stringify 可以把對(duì)象轉(zhuǎn)化成 JSON字符串

比如 JSON.stringify(o) 可以得到結(jié)果'{'RuntimeSources':{'flask-webapp':{'eb-flask1.3':{'s3url':''}}},'DeploymentId':4,'Serial':4}'

繼續(xù)觀察可以發(fā)現(xiàn):

在 JSON 中, : 前的是鍵名

把 JSON 的元素構(gòu)成一個(gè)數(shù)組,再把 冒號(hào) 前的挑出來就可以了。

工具函數(shù)

// 把在 str 中的 willBeReplaced 替換為 toPlacevar replaceAll = (str, willBeReplaced, toPlace) => { return str.split(willBeReplaced).join(toPlace)}// 把在 str 的全部 willBeCut 替換成 ’’var cut = (str, willBeCut) => { return replaceAll(str, willBeCut, ’’); }

flat 的實(shí)現(xiàn)

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, ’'’, ’’)); }

上面的意思是:

第一個(gè) reduce 給 { } : , 的前后補(bǔ)了空格

對(duì)應(yīng)代碼

// o 是待處理對(duì)象 let str = JSON.stringify(o); var A = [’{’, ’}’, ’:’, ’,’].reduce((acc, e) => { // 把 e 的兩側(cè)都補(bǔ)上一個(gè)空格 return replaceAll(acc, e, ` ${e} `); }, str)

結(jié)果是這樣的:

原來的 str 從

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

經(jīng)過處理后 變成

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

得到一個(gè)中間結(jié)果 A

Next

這里要處理 A

對(duì)應(yīng)代碼:

var B = [’{’, ’}’, ’:’, ’,’].reduce((acc, e) => { return replaceAll(acc, e, ` ${e} `); }, str).split(’ ’).filter(e => e !== '')

把 A 轉(zhuǎn)成中間數(shù)組 B: (從字符串變成數(shù)組)

javascript - 關(guān)于json中獲取多個(gè)key-value對(duì)中多層嵌套key的name

最后一個(gè) reduce 得到結(jié)果

觀察 B 可以得到一個(gè)結(jié)論

在 JSON 中, : 前的是鍵名

據(jù)此寫出 最后的reduce:把 冒號(hào) 前的元素收集起來 得到結(jié)果

ScreenShot

javascript - 關(guān)于json中獲取多個(gè)key-value對(duì)中多層嵌套key的name

回答3:

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} 執(zhí)行四次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]))} }} }

執(zhí)行到最后應(yīng)該會(huì)拋出錯(cuò)誤 Cannot convert undefined or null to object,這個(gè)沒事兒

回答4:

如果是要用python實(shí)現(xiàn)的話,dict是一種散列表結(jié)構(gòu),就是說數(shù)據(jù)輸入后按特征已經(jīng)被散列了,有自己的順序如果你可以指定key的名字倒還可以獲取,如果不能指定key的名字,那就做不到

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

python 默認(rèn)字典是無序的,但是可以用 OrderedDict 有序字典來實(shí)現(xiàn)。

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)回答6:

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

標(biāo)簽: JavaScript
相關(guān)文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日韩精品免费一区二区夜夜嗨 | 国精品一区二区三区| 久久亚洲影院| 日韩视频在线一区二区三区 | 欧美日韩一区二区国产| 九九久久婷婷| 久久精品二区三区| 日韩欧美另类一区二区| 亚洲综合电影| 国产精品99一区二区| 亚洲欧美日韩高清在线| 欧美日韩国产精品一区二区亚洲| 色在线中文字幕| 久久蜜桃精品| 天堂8中文在线最新版在线| 日韩国产一区二区三区| 97精品一区二区| 日韩欧美看国产| 影院欧美亚洲| 婷婷五月色综合香五月| 国产精品香蕉| 最新中文字幕在线播放| 久久久久国产| 美女精品在线| 国产精品一区二区av日韩在线| 国产精品第一国产精品| 成人在线视频免费看| 欧洲在线一区| 在线看片日韩| 中文无码久久精品| 国产免费av一区二区三区| 国产精品99精品一区二区三区∴ | 蜜芽一区二区三区| 欧美日韩18| 日韩欧美一区二区三区免费观看| 久久久久国产精品一区三寸| 亚洲韩日在线| 国产三级一区| 成人小电影网站| 在线精品一区| 91综合网人人| 午夜久久影院| 日本一区二区免费高清| 日韩一级不卡| 精品视频97| 亚洲欧美久久久| 麻豆国产91在线播放| 免费黄色成人| 国产精品久久| 亚洲精品欧美| 欧美日韩一区二区三区视频播放| 午夜亚洲福利| 欧美在线影院| 精品一区二区三区中文字幕| 亚洲一区二区网站| 久久久久国产| 国产麻豆一区| 免费看黄色91| 亚洲成人精选| 日韩一区三区| 精品国产亚洲日本| 欧美日韩调教| 午夜亚洲福利| 香蕉久久久久久久av网站| 亚洲午夜精品久久久久久app| 麻豆精品在线播放| 欧美日韩网址| 国产精品嫩模av在线| 91精品国产自产观看在线| 久久国产精品99国产| 亚洲欧美成人综合| 欧美性感美女一区二区| 久久久天天操| 日韩精品专区| 中文在线а√天堂| 欧美日一区二区| 国产综合亚洲精品一区二| 欧美日韩一二| 亚洲一区二区三区久久久| 亚洲三级网站| 国产欧美日韩精品高清二区综合区| 日韩综合一区二区| 国产欧美一级| 桃色一区二区| 99国产精品久久久久久久成人热| 三级在线观看一区二区| 欧美日韩国产一区精品一区| 久久国产精品久久久久久电车| 亚洲精品字幕| 国产精品一区二区av交换| 久久精品九色| 夜鲁夜鲁夜鲁视频在线播放| 久久精品中文| 亚洲精品高潮| 精品国产一区二区三区av片| 欧美精品不卡| 国产精品白丝一区二区三区| 欧美激情 亚洲a∨综合| 国产精品毛片| 亚洲理论在线| 国产精品www994| 四虎成人av| 三级在线观看一区二区| 日韩av黄色在线| 免费一二一二在线视频| 99国产精品久久久久久久成人热 | 激情综合网站| 国产欧美丝祙| 久久蜜桃av| 精品国产中文字幕第一页| 婷婷成人在线| 精品国产乱码久久久久久樱花| 日本韩国欧美超级黄在线观看| 免费久久99精品国产| 超碰超碰人人人人精品| 久久亚洲欧美| 97精品资源在线观看| 免费视频国产一区| 美女视频免费精品| 亚洲v天堂v手机在线| 韩国女主播一区二区三区| 亚洲精品伊人| 欧美日韩一二三四| 国产一区二区三区探花| 日韩黄色在线观看| 自由日本语亚洲人高潮| аⅴ资源天堂资源库在线| 国产精品外国| 樱桃视频成人在线观看| 麻豆91在线播放| 国产亚洲一卡2卡3卡4卡新区| 亚洲综合日韩| 亚洲免费影院| 视频一区中文字幕| 五月天久久777| 免费毛片在线不卡| 四虎4545www国产精品 | 国产亚洲人成a在线v网站| 日韩中文字幕1| 亚洲少妇诱惑| 国产 日韩 欧美一区| 日韩精品91| 日韩一区二区三区免费| 久久夜夜操妹子| 久久美女精品| 欧美日韩激情| 欧美在线资源| 亚洲区第一页| 欧美亚洲综合视频| 国产日韩欧美在线播放不卡| 蜜桃视频一区二区三区在线观看 | 日本va欧美va欧美va精品| 亚洲精品网址| 不卡视频在线| 亚洲精选av| 日本欧美一区二区| 美女毛片一区二区三区四区最新中文字幕亚洲 | 久久蜜桃av| 91精品一区二区三区综合| 免费视频一区三区| 久久成人一区| 日韩高清不卡一区| 日本欧美在线看| 久久精品欧洲| 国产综合亚洲精品一区二| 亚洲精品免费观看| 麻豆高清免费国产一区| 亚洲午夜黄色| 一本综合精品| 麻豆成全视频免费观看在线看| 日韩在线短视频| 亚洲bt欧美bt精品777| 岛国精品一区| 在线免费观看亚洲| 日韩a一区二区| 午夜宅男久久久| 免费一二一二在线视频| se01亚洲视频| 午夜天堂精品久久久久| 精品丝袜在线| 色8久久久久| 国产一区视频在线观看免费| 免费精品视频在线| 国产在线|日韩| 精品伊人久久| 色狠狠一区二区三区| 久久在线免费| 风间由美中文字幕在线看视频国产欧美| av不卡在线看| 国产一区丝袜| 国产精品任我爽爆在线播放| 免费精品视频| 国产精品99视频| 精品三区视频| 激情中国色综合| 福利在线免费视频| 免费一级欧美片在线观看网站| 啪啪亚洲精品| 日韩精品第一| 欧美一区成人|