【问题标题】:How to Treat "null" Values in JSON file as null with Nodejs如何使用 Nodejs 将 JSON 文件中的“null”值视为 null
【发布时间】:2021-01-13 12:39:26
【问题描述】:

我有一个大型 JSON 文件,该文件由另一个无法修改的进程生成。如果是空白值,该过程会将“null”作为这些属性的值。

并且我需要在我的 Nodejs 服务器端将这些“null”值视为 null,否则它们将被视为文字字符串。我想看看JSON.parser(fs.readFileSync('...')) 是否有办法读取文件并为这些属性创建一个具有null 而不是"null" 的局部变量。

【问题讨论】:

  • 为什么不修复生成并使其行为正确?姓“Null”的人已经有足够多的问题,不需要其他应用程序将他们视为不存在。或者用户键入“null”故意破坏应用程序。或者任何其他数量的导致“null”作为合法字符串的东西,这将导致难以追踪和难以修复的错误。
  • 正如我所说,我无权访问它。此外,它还会影响许多其他组件。

标签: node.js json null


【解决方案1】:

实现此目的的正确方法是按照 JSON.parse() documentation 使用 reviver 函数:

let string = '{"key1": "value1", "key2": "null"}';

let json = JSON.parse(string, function reviver(key, value) {
  return (value == 'null') ? null : value;
});

console.log(json);

【讨论】:

  • 我想知道这个答案有什么问题,所以有人会否决它。
【解决方案2】:

检查this的答案。

不要用文本替换它,而是用null替换'null'

所以:

// test.json content:
{
    "test": "null",
    "test2": "null",
    "test3": null,
    "test4": [1, null, "null", 2, "3"]
}


// index.js content:
const fs = require('fs');

const source = fs.readFileSync('test.json', 'utf8');
const fixedJson = source.replace(/"null"/g, 'null');
const fixedObject = JSON.parse(fixedJson);

console.log(fixedJson);
console.log(fixedObject);
console.log(fixedObject.test3 === null);

【讨论】:

  • 这似乎不起作用。我仍然得到"null" 的价值。
  • 不,你会得到null,而不是'null'。那就是你所要求的。你还想得到什么?
  • 您在 Node 变量中要求 null。如果您想在变量中获取'',请将替换的第二个参数更改为''
  • 当我说null时,结果应该是{ "test": null}。我希望能够遍历属性并匹配空值,例如if (test === null).
  • 太好了,所以请接受我的回答,因为fixedObject.test === null 将导致true。提前致谢
猜你喜欢
  • 1970-01-01
  • 2021-01-19
  • 2013-08-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-02-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多