当前位置: 首页 > 知识库问答 >
问题:

使用节点从json文件读取值。js公司

党浩阔
2023-03-14

我不熟悉node。js被困在这里了。我有一个json文件keyValue。类似于此的json

[ {
    "key": "key1",
    "value": "value1"
  },   
  {
    "key": "key2",
    "value": "value2"
  } 
]

对于特定的键,我需要获取值。

function filterValue() {
  const category = {};
  category.filter = "key1" //this is not static value. This changes dynamically
  category.value = //Need to read the keyValue.json file and pick the value for key1 - which is value1
  return category;
}

如何在node中实现这一点。js。谢谢你的帮助。

共有2个答案

钱飞翼
2023-03-14

如果您有名为keyValue的json对象。首先导入它并将其命名为keyValue,然后尝试此操作,

`function filterValue(req, res, next) {
   keyValue
      .find({ key: "key1" })
      .exec()
      .then(result= > {
         return result.value
      })  
}`
梁渊
2023-03-14

我假设您已将json解析为变量。因此,我的示例将使用以下内容:

const data = [ 
  {
    key: "key1",
    value: "value1"
  },   
  {
    key: "key2",
    value: "value2"
  } 
];

如果没有,那么在节点中我们可以只需要它,只要它是一个静态文件。但这将在应用程序的执行时间内加载一次。

const data = require('./file.json');

如果由于某些原因需要动态读取,则需要使用fs(始终在节点中异步执行)。

const fs = require('fs');

fs.readFile('./file.json', 'utf8', function(err, contents) {
    if (err) {
      // we have a problem because the Error object was returned
    } else {
      const data = JSON.parse(contents);
      ... use the data object here ...
    }
});

如果你更喜欢promise而不是回扣:

const fs = require('fs');

// ES7 Version
const getJsonFile = (filePath, encoding = 'utf8') => (
   new Promise((resolve, reject) => {
      fs.readFile(filePath, encoding, (err, contents) => {
          if(err) {
             return reject(err);
          }
          resolve(contents);
      });
   })
     .then(JSON.parse)
);

// ES6 Version
const getJsonFile = function getJsonFile(filePath, encoding = 'utf8') {
   return new Promise(function getJsonFileImpl(resolve, reject) {
      fs.readFile(filePath, encoding, function readFileCallback(err, contents) {
          if(err) {
             return reject(err);
          }
          resolve(contents);
      });
   })
     .then(JSON.parse);
};

现在有了这两个选项中的任何一个,你都可以简单地使用promise

getJsonFile('./file.json').then(function (data) { ... do work });

或者如果使用异步

const data = await getJsonFile('./file.json');

所以现在我们需要一个可组合的过滤器来与Array的查找方法一起使用。在最新版本的Node(Carbon及更高版本)中:

const keyFilter = (key) => (item) => (item.key === key);

如果您是节点6或以下,让我们以旧方法执行此操作

const keyFilter = function keyFilter(key) {
   return function keyFilterMethod(item) {
      return item.key === key;
   }
};

现在我们可以在数组上使用此过滤器,随时更改我们正在寻找的键(因为它是可组合的)。

const requestedItem = data.find(keyFilter('key2');

如果键不存在,则返回undefined,否则返回object。

const requestedValue = requestedItem ? requestedItem.value : null;

此过滤器还可用于数组中的其他搜索,例如查找索引

const index = data.findIndex(keyFilter('key2'));

如果允许在数组中复制“键”,您可以使用过滤器获取它们

const items = data.filter(keyFilter('key2'));

综上所述,我们可能会将我们关注的领域放在不同的文件中。所以也许一个getJsonFile.js和一个keyFilter.js所以现在放在一起,我们看起来像这样(将这个文件称为readKeyFromFile):

const getJsonFile = require('./getJsonFile');
const keyFilter = require('./keyFilter');

module.exports = async (filePath, keyName) => {
   const json = getJsonFile(filePath);
   const item = json.find(keyFilter(keyName));
   return item ? item.value : undefined;
};

而我们的消费者

const readKeyFromFile = require('./readKeyFromFile');

readKeyFromFile('./file.json', 'key2').then((value) => {
   console.log(value);
};

一旦理解了这些基本原理,您可以通过多种组合来实现这一点。因此,与他们一起玩吧。:)

 类似资料:
  • 我不知道这是如何可能的编程新我想打印值,在abc.txt中存在,但不知道如何做到这一点,使用节点js 预期输出:

  • 我正在尝试使用读取aws s3存储桶中的文件 我已经能够使用节点aws-sdk下载和上传文件,但是我不知道如何简单地读取它并解析内容。 下面是我如何从s3读取文件的示例:

  • 问题内容: 我正在尝试使用AWS S3存储桶中的文件进行读取 我已经能够使用节点aws-sdk下载和上传文件,但是我对如何简单地读取文件并解析内容感到困惑。 这是我从s3中读取文件的示例: 问题答案: 您有两种选择。您可以包括一个回调作为第二个参数,该参数将与任何错误消息和对象一起调用。该示例直接来自AWS文档: 或者,您可以将输出转换为流。AWS文档中还有一个示例:

  • 问题内容: 我正在尝试从JSON文件读取值到数组以进行进一步处理。我正在使用JSON-Smart 1.2.0库。由于某些限制,我不能使用2.0版本。 我收到以下异常。 我什至尝试使用JSONArray而不是JSONObject。我在这儿做错了什么?这是读取JSON内容的正确方法吗? 以下是Java代码。 以下是json文件的内容。 问题答案: 您的JSON包含一个具有单个对象元素的数组,因此您应该

  • 问题内容: 我正在尝试使用该模块从python脚本读取json文件。经过一番谷歌搜索后,我发现以下代码: json文件的路径和名称在哪里。我收到以下错误: 问题答案: 该代码用作变量名。它将阴影您导入的模块引用。为变量使用其他名称。 除此之外,代码在接受字符串的同时传递文件对象。 传递文件内容: 或使用接受类似文件的对象。

  • 问题内容: 只是因为一个简单,易于表达的陈述使我的脸上有些错误,所以我有点头疼。 我有一个名为strings.json的json文件,如下所示: 我现在想读取json文件。我发现了以下这些语句,但是不起作用: 控制台上显示的错误是这样的: 已编辑 从更改为 并得到了这个: 问题答案: 该方法(“ load”中没有“ s”)可以直接读取文件: 您正在使用方法,该方法仅用于 字符串 参数。 编辑:新消