我将 json
和 key
传递给下面的函数以检索其值
。 key 可以像 abc.cde.def 一样,也可以像 fgh 一样。
如果键包含 .
那么它是一个嵌套的 json
并且必须相应地检索值,这是正确发生的,但如果它是一个普通的 json
没有嵌套,那么它就不起作用。打印keysData的长度(如果key
类似于fgh),它会在应该打印1的地方打印3。
function getValueFromJson(jsonInput,keyInput) {
if(keyInput.includes('.')){
var keysData = keyInput.split('.');
}
else {
keysData = keyInput.toString()
}
var jsonHierarchy = jsonInput;
if(parseInt(keysData.length) === parseInt('1')){
console.log(jsonHierarchy)
console.log(keysData )
console.log(jsonHierarchy[keysData ])
jsonHierarchy = jsonHierarchy[keysData ];
}
return jsonHierarchy;
};
谁能帮我解决这个问题吗?
最佳答案
您不需要检查if(keyInput.includes('.'))
只需执行keyInput.split('.')
//for Ex.
'abc.defg'.split('.') // result ['abc', 'defg']
'abc'.split('.') // result ['abc']
还有
if(parseInt(keysData.length) === parseInt('1'))
//can be used as
if(keysData.length === 1)
你的完整功能应该是
function getValueFromJson(jsonInput,keyInput) {
var keysData = keyInput.split('.');
var jsonHierarchy = jsonInput;
keysData.forEach(function(d) {
if(jsonHierarchy)
jsonHierarchy = jsonHierarchy[d];
})
return jsonHierarchy;
};
var jsonData = {
'abc': {
'def': {
'gh': 'value1'
},
'xyz': 'value2'
}
};
function getValueFromJson(jsonInput, keyInput) {
var keysData = keyInput.split('.');
var jsonHierarchy = jsonInput;
keysData.forEach(function(d) {
if (jsonHierarchy)
jsonHierarchy = jsonHierarchy[d];
})
return jsonHierarchy;
};
function get() {
var val = document.getElementById('key').value;
if (val)
console.log(getValueFromJson(jsonData, val));
};
<input id="key" />
<button onclick="get()">Get Value</button>
关于javascript - Nodejs - 从嵌套和非嵌套 json 中检索值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39039391/