我将json
和key
传递给下方的函数以检索其value
。关键可以像abc.cde.def那样它也可以像fgh一样。
如果密钥包含.
,则它是嵌套的json
,并且必须相应地重新计算值,这是正确发生的,但如果它是没有嵌套的普通json
那么它是不工作打印keysData的长度(如果key
类似fgh),它打印3应该打印1。
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;
};
任何人都可以帮忙,我该怎么处理?
答案 0 :(得分:2)
您无需检查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>
&#13;
答案 1 :(得分:0)
将您的字符串转换为数组,然后将您的长度转换为正确显示。
var keysData = keyInput.split('.')