javascript - 在不使用 lodash get 的情况下从 json 中提取深层属性

标签 javascript json node.js

所以我们有一个示例 json

{
  "name": "app",
  "version": "0.1.0",
  "description": "Sample description",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "repository": {
    "type": "git",
    "url": "some git url"
  },
  "keywords": [
    "node"
  ],
  "author": "Anonymous",
  "license": "ISC"
}

这是我们的 node.js 脚本

var obj = require('./package.json');
console.log(obj[process.argv[2]]);

当我执行 node getval.js version 时,它起作用了。但是,当我执行 node getval.js repository.url 时,我得到了 undefined。

当我将代码更改为下面的代码时,它起作用了。但是,我不想对键值进行硬编码

console.log(obj['repository']['url']);

最佳答案

给定一个对象obj和一个"repository.url" key,你可以用

var val = key.split(".").reduce((o,k)=>o[k],obj);

演示:

var obj = {
  "name": "app",
  "version": "0.1.0",
  "description": "Sample description",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "repository": {
    "type": "git",
    "url": "some git url"
  },
  "keywords": [
    "node"
  ],
  "author": "Anonymous",
  "license": "ISC"
};

var key = "repository.url";

var val = key.split(".").reduce((o,k)=>o[k],obj);

document.write("result: \"" + val + "\"");

现在,假设您想要一些在缺少某些属性时不会抛出异常的东西,例如 "repository.language.version",那么您可以这样做

var val = key.split(".").reduce((o={},k)=>o[k],obj);

关于javascript - 在不使用 lodash get 的情况下从 json 中提取深层属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37192518/

相关文章:

javascript - 通过图例隐藏 Highcharts 系列,它们之间不留空白

javascript - setTimeout 响应点击打开一个新窗口

php - 调用 javascript 表单 php

java - 我如何告诉 jackson 忽略我无法控制源代码的属性?

javascript - 错误: missing : after property id?

node.js - 安装composer-cli时出错

javascript - 带名称的生成器函数

javascript - 下拉菜单显示,但当我单击它时没有任何反应,有人可以告诉我为什么吗?

android - 如何将图像文件添加到 json 对象中?

javascript - 为什么这个尾递归循环会导致javascript/node中的栈溢出?