javascript - Nodejs - 从嵌套和非嵌套 json 中检索值

标签 javascript json node.js

我将 jsonkey 传递给下面的函数以检索其。 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/

相关文章:

java - 从 URL 解析 JSON

java - 使用 Netflix Eureka 的 JSONException

javascript - socket io - 它如何知道数据库中的数据是否已更改?

javascript - Jquery Sliding Div 只工作一次

javascript - 只有一个使用 react-grid-layout 的 highcharts 可以调整大小

javascript - lodash 别名 : whether to use or not?

json - 当值是None时,在play-json序列化中为Option [T]输出'null'

node.js - 由于使用代理,Git 和 NPM 失败

node.js - 使用sequelize 包含列的where 子句

php - 8 拼图,图树路径生成器