nodejs - 从嵌套和非嵌套json

时间:2016-08-19 12:44:36

标签: javascript json node.js

我将jsonkey传递给下方的函数以检索其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;
};

任何人都可以帮忙,我该怎么处理?

2 个答案:

答案 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;
&#13;
&#13;

答案 1 :(得分:0)

将您的字符串转换为数组,然后将您的长度转换为正确显示。

    var keysData = keyInput.split('.')