簡體   English   中英

Nodejs - 從嵌套和非嵌套 json 中檢索值

[英]Nodejs - retrieve value from nested and non-nested json

我將json和一個key傳遞給下面的函數來檢索它的value 密鑰可以像 abc.cde.def nad 它也可以像 fgh only。

如果密鑰包含. 那么它是一個嵌套的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>

將您的字符串轉換為數組,然后正確顯示您的長度。

    var keysData = keyInput.split('.')

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM