迹忆客 专注技术分享

当前位置:主页 > 学无止境 > 编程语言 > Node.js >

在 Node.js 中解析 Json

作者:迹忆客 最近更新:2023/05/09 浏览次数:

在本节中,我们将学习在 Node js 中同步解析 JSON。解析 JSON 数据可能被称为以你当前可能使用的特定语言解释 JSON 数据的过程。

JSON 数据通常存储在键值对中,作为用引号括起来的字符串值,同时仍然遵循 JSON 规范。从服务器接收或由 API 返回的 JSON 数据通常采用字符串格式。在这种原始格式中,JSON 数据不易读取和访问,因此需要转换为更用户友好的形式。

我们可以使用三种主要方法来解析 Node js 中的 JSON 文件。对于本地文件,即那些驻留在本地计算机存储中的文件,我们可以使用 require() 函数将模块加载到 Node js 环境中。但是,此方法是同步的,这意味着该程序在当前文件完全解析之前不会执行任何其他操作。

[
    {
      "id": 0,
      "name": "Maribel Andrews"
    },
    {
      "id": 1,
      "name": "Gilliam Mcdonald"
    },
    {
      "id": 2,
      "name": "Lisa Wright"
    }
  ]
const friends  = require("./friends.json");
 
console.log(friends);

样本输出:

[
  { id: 0, name: 'Maribel Andrews' },
  { id: 1, name: 'Gilliam Mcdonald' },
  { id: 2, name: 'Lisa Wright' }
]

该程序不适用于动态程序,但适用于静态文件。一旦进行了任何更改,可能会更改数据的程序将要求我们重新解析数据。这不是解析 JSON 文件的最佳方式。

或者,我们可以使用 fs 模块和 fs.readFileSync() 加载 JSON 文件,而不是将其作为模块加载。fs 模块是执行文件操作(例如读取文件、重命名和删除)的一种更有效的方式。fs.readFileSync() 是一个允许我们同步读取文件及其内容的接口。

[
    {
      "id": 0,
      "name": "Maribel Andrews"
    },
    {
      "id": 1,
      "name": "Gilliam Mcdonald"
    },
    {
      "id": 2,
      "name": "Lisa Wright"
    }
  ]
const fs = require("fs");
 
const friends = fs.readFileSync("./friends.json");
 
 
console.log(friends);

样本输出:

<Buffer 5b 0d 0a 20 20 20 20 7b 0d 0a 20 20 20 20 20 20 22 69 64 22 3a 20 30 2c 0d 0a 20 20 20 20 20 20 22 6e 61 6d 65 22 3a 20 22 4d 61 72 69 62 65 6c 20 41 ... 144 more bytes>

虽然我们已成功加载 JSON 文件,但我们尚未指定编码格式。readFileSync() 方法在未指定编码参数时(即为 null)返回原始缓冲区。文本文件的编码格式通常是 utf-8

const fs = require("fs");
 
const friends = fs.readFileSync("./friends.json", {encoding: 'utf-8'});
 
console.log(friends);

样本输出:

[
    {
      "id": 0,
      "name": "Maribel Andrews"
    },
    {
      "id": 1,
      "name": "Gilliam Mcdonald"
    },
    {
      "id": 2,
      "name": "Lisa Wright"
    }
  ]

现在我们已经成功读取了 JSON 文件,我们可以将 JSON 字符串解析为 JSON 对象。我们可以使用 JSON.parse() 函数来做到这一点。这是一个 javascript 函数,我们可以使用它来将 JSON 字符串转换为对象。

此函数接受两个参数:要解析的 JSON 字符串和称为 reviver 的可选参数。根据 mozilla.org,如果 reviver 参数是一个函数,它指定如何转换最初解析的值。

const fs = require("fs");
 
const friends = fs.readFileSync("./friends.json", {encoding: 'utf-8'});
 
const parsed_result = JSON.parse(friends);
 
 
console.log(parsed_result);

输出:

[
  { id: 0, name: 'Maribel Andrews' },
  { id: 1, name: 'Gilliam Mcdonald' },
  { id: 2, name: 'Lisa Wright' }
]

在本节中,我们将看到异步解析 JSON 字符串的方法。在前面的示例中,我们已经了解了如何同步解析 JSON 字符串数据。但是,在 Node js 中,编写同步函数被认为是不好的,尤其是在数据很大的情况下。

我们可以使用 fs.readFile() 方法将 JSON 字符串数据解析为 JSON 对象并回调函数。

它将保证程序的其余部分将在后台获取数据的同时执行,从而减少加载数据的不必要等待时间。

const fs = require('fs');
 
fs.readFile('./friends.json',{encoding: 'utf-8'}, (err, data) => {
  if (err) console.error(err);
  const parsed_data  = JSON.parse(data);
 
  console.log(parsed_data);
});
 
console.log("Rest of the program that needs to be executed!");

样本输出:

Rest of the program that needs to be executed!
[
  { id: 0, name: 'Maribel Andrews' },
  { id: 1, name: 'Gilliam Mcdonald' },
  { id: 2, name: 'Lisa Wright' }
]

虽然在处理大量数据时,这种方法似乎比前面讨论的同步方法更好,但事实并非如此。当我们有来自外部源的数据时,我们经常需要在进行新的更改时再次重新加载数据;这与使用同步方法时的情况相同。在处理大量外部数据时,推荐使用本机 Node js 流 APIS。

上一篇:NodeJS 中的日志记录

下一篇:更新 Node.js

转载请发邮件至 1244347461@qq.com 进行申请,经作者同意之后,转载请以链接形式注明出处

本文地址:

相关文章

在 Node.js 中编码 URL

发布时间:2023/03/27 浏览次数:201 分类:Node.js

在这篇简短的文章中,我们将学习如何在 Node.js 中进行 URL 编码。

在 Node.js 中编码 Base64

发布时间:2023/03/27 浏览次数:155 分类:Node.js

在本文中,我们将学习如何在 Node.js 中将字符串或文本转换为 base64。

扫一扫阅读全部技术教程

社交账号
  • https://www.github.com/onmpw
  • qq:1244347461

最新推荐

教程更新

热门标签

扫码一下
查看教程更方便