2016-08-19 48 views
0

我正在通過jsonkey以下函數檢索其value。關鍵可以像abc.cde.def它也可以像fgh一樣。nodejs - 從嵌套和非嵌套json檢索值

如果密鑰包含.那麼它是一個嵌套json和值必須相應retirieved其被正確地發生,但如果它是一個普通的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

由於你正在使用的密鑰作爲字符串數據類型的'.length'屬性得到那個結果。你需要將你的'keysInput'放到一個數組中 –

回答

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>

+0

這解決了這個問題,但我無法檢索值,它給出了'undefined' – Abhinav

+0

更新我的答案。 – Jag

+0

我正在做同樣的'console.log(jsonHierarchy [keysData])',但它給出了undefined – Abhinav

0

將您的字符串轉換爲數組,然後使用正確顯示的長度。

var keysData = keyInput.split('.') 
+1

整個'if/else'塊是多餘的,因爲如果它找不到匹配的話它會返回一個包含完整字符串的數組。 –

+0

這解決了這個問題,但我無法檢索值,它給'未定義'。 – Abhinav

+0

@BenFortune你100%正確。 –