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

您的位置:首頁技術文章
文章詳情頁

javascript - 關于json中獲取多個key-value對中多層嵌套key的name

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

問題描述

{ '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實現都可以

問題解答

回答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}

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

從對象里抽離出該對象的全部鍵名,并構成一個數組

這個過程 暫且稱之為 鋪平 flat, 我這里也實現了這個函數 用于取得這個解。

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

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

利用這樣的特性編寫遞歸函數:

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

javascript - 關于json中獲取多個key-value對中多層嵌套key的name

特別地 你需要 flask-webapp 這個鍵名:

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

JSON.stringify 可以把對象轉化成 JSON字符串

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

繼續觀察可以發現:

在 JSON 中, : 前的是鍵名

把 JSON 的元素構成一個數組,再把 冒號 前的挑出來就可以了。

工具函數

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

flat 的實現

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

上面的意思是:

第一個 reduce 給 { } : , 的前后補了空格

對應代碼

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

結果是這樣的:

原來的 str 從

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

經過處理后 變成

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

得到一個中間結果 A

Next

這里要處理 A

對應代碼:

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

把 A 轉成中間數組 B: (從字符串變成數組)

javascript - 關于json中獲取多個key-value對中多層嵌套key的name

最后一個 reduce 得到結果

觀察 B 可以得到一個結論

在 JSON 中, : 前的是鍵名

據此寫出 最后的reduce:把 冒號 前的元素收集起來 得到結果

ScreenShot

javascript - 關于json中獲取多個key-value對中多層嵌套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} 執行四次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,這個沒事兒

回答4:

如果是要用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]回答5:

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

標簽: JavaScript
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
日本特黄久久久高潮| 国产精品中文字幕亚洲欧美| 欧美综合社区国产| 欧美日韩精品一区二区三区视频| 午夜精品免费| 视频一区二区中文字幕| 亚洲一二av| 奇米狠狠一区二区三区| 久久精品99久久久| 麻豆精品在线观看| 高清在线一区| 国产字幕视频一区二区| 性色一区二区| 日韩精品中文字幕一区二区| 国产日韩欧美一区二区三区 | 国产精品日本一区二区不卡视频| 国产精品乱战久久久| 国产成人精品一区二区三区免费| www.九色在线| 天堂成人国产精品一区| 欧美午夜三级| 九九精品调教| 日韩精品一级| 91精品精品| 日韩欧美中文在线观看| 国产探花在线精品| 91精品一区国产高清在线gif | 日韩av一区二区在线影视| 国产精品一区二区精品视频观看 | 欧美偷窥清纯综合图区| www.com.cn成人| 欧美理论视频| 精品视频在线一区二区在线| 国产精品视区| 日韩欧美中文| 欧美天堂一区| 午夜宅男久久久| 毛片在线网站| 日本不卡的三区四区五区| 99久久夜色精品国产亚洲狼| 国产毛片精品| 视频一区中文字幕国产| 日韩精品一区二区三区免费观影 | 免费成人av在线播放| 97国产精品| 国产精品高清一区二区| 欧美成a人片免费观看久久五月天| 中文字幕色婷婷在线视频| 国产亚洲久久| 91精品国产一区二区在线观看| 女人天堂亚洲aⅴ在线观看| 高清一区二区| 久久不卡日韩美女| 91精品国产自产精品男人的天堂| 99综合视频| 99pao成人国产永久免费视频 | 蜜臀av国产精品久久久久 | 亚洲综合五月| 国产视频亚洲| 亚洲综合电影一区二区三区| 激情欧美亚洲| 国产亚洲精品v| 久久高清免费| 亚洲欧洲一区二区天堂久久| 欧美日韩精品在线一区| 亚洲二区免费| 国产高清一区二区| 日韩欧美一区二区三区免费观看| 最新中文字幕在线播放 | 国产亚洲一区二区三区啪| 日本亚洲视频在线| 国产毛片精品| 91麻豆国产自产在线观看亚洲| 久久精品国产网站| 日本少妇一区| 视频精品一区二区| 国产精品玖玖玖在线资源| 久久久久国产| 99riav国产精品| 国产资源在线观看入口av| 久久久噜噜噜| 国产免费成人| 91成人福利| 免费视频一区三区| 蜜臀国产一区二区三区在线播放| 久久影院一区二区三区| 色在线视频观看| 亚洲三级网址| 高清久久精品| 在线视频免费在线观看一区二区| 亚洲精品在线国产| 国产欧洲在线| 亚洲精一区二区三区| 国产成人77亚洲精品www| 日韩网站在线| 国产伦理久久久久久妇女| 欧美久久天堂| 欧美一级网站| 婷婷激情图片久久| 国产精品最新| 黄色成人91| 天堂中文av在线资源库| 亚洲精品一级| 国产精品呻吟| 91欧美在线| 久久精品 人人爱| 国产一区二区高清| 久久精品日韩欧美| 亚洲人成网77777色在线播放| av中文字幕在线观看第一页| 亚洲精品1区| 日韩欧美网址| 精品一区二区三区在线观看视频| 亚洲欧洲一区二区天堂久久| 日韩成人综合| 久久中文字幕一区二区三区| 亚洲天堂日韩在线| 亚洲精品123区| 欧美日韩免费观看一区=区三区| 日韩av自拍| 亚洲精品永久免费视频| 综合视频一区| 91久久黄色| 91精品久久久久久久久久不卡| 精品视频网站| 亚洲精品一二| 亚洲日韩中文字幕一区| 免费精品视频| 巨乳诱惑日韩免费av| 先锋亚洲精品| 亚洲一区二区三区无吗| 国产精品88久久久久久| 国产精品97| 噜噜噜躁狠狠躁狠狠精品视频 | 蜜桃一区二区三区在线观看| 99在线精品视频在线观看 | 国产中文欧美日韩在线| 久久av网址| 岛国av在线播放| 亚洲免费成人| 国产精品一区二区av交换| 久久久久免费av| 久久xxxx| 国产亚洲电影| yellow在线观看网址| 亚洲精品一区二区妖精| 久久午夜影视| 国产丝袜一区| 四虎8848精品成人免费网站| 日韩一区二区三区在线免费观看| 五月综合激情| 亚洲另类视频| 美女视频免费精品| 成人免费网站www网站高清| 九一成人免费视频| 亚洲精品大片| 国产一区二区精品久| 免费观看久久av| 日韩一区二区三区高清在线观看| 欧美日韩一区二区国产 | 模特精品在线| 自由日本语亚洲人高潮| 麻豆91精品| 国产一区二区三区视频在线| 日韩av有码| 97精品资源在线观看| 亚洲特级毛片| 国产精品a级| 亚洲五月综合| 亚洲午夜一级| 久久这里只有精品一区二区| 视频一区视频二区中文| 亚洲欧洲美洲av| 国产麻豆精品| 免费在线观看精品| 国产盗摄——sm在线视频| 日韩福利视频导航| 黄色国产精品| 久久婷婷激情| 精品网站999| 国产精品亚洲综合久久| 日韩国产成人精品| 午夜一级久久| 午夜亚洲一区| 亚洲视频二区| 亚洲二区在线| 精品久久影院| 国产一卡不卡| 欧美日韩一视频区二区| 日本欧洲一区二区| 亚洲黄色在线| 日韩视频不卡| 黄色欧美日韩| 国产一区二区精品| 久久影视一区| 黑丝一区二区三区| 欧美jjzz| 蜜臀久久99精品久久久画质超高清| 水野朝阳av一区二区三区| 男人的天堂亚洲一区|