Rumah > Soal Jawab > teks badan
{
"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
黄舟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
漂亮男人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"]
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);
}
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"]
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:
ialah nama kunci
JSON
中,:
Yang sebelum
冒号
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 } "
A
Dapatkan keputusan pertengahan
A
Untuk diuruskan di sini
Kod sepadan:
var B = ['{', '}', ':', ','].reduce((acc, e) => {
return replaceAll(acc, e, ` ${e} `);
}, str).split(' ').filter(e => e !== "")
A
转成中间数组 B
Tukar kepada tatasusunan perantaraan : (dari rentetan ke tatasusunan)
Pengurangan terakhir dapat hasilnyaB
boleh membawa kepada kesimpulanialah nama kunciYang sebelum
JSON
中,:
冒号
ScreenShot
🎜🎜世界只因有你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
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]
世界只因有你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)
曾经蜡笔没有小新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]);