将 TypeScript 对象转换为 JSON 字符串。

119
我正在尝试初始化一个TypeScript对象,其中需要针对“选项”参数提供JSON字符串。确切地说,它是这里的对象。为了初始化dijit,选项参数必须是JSON字符串而不是对象。
有没有一种方法可以从TypeScript对象创建JSON字符串,而不需要手动进行处理?
请勿链接任何没有明确指出“TypeScript”的问题,因为此问题专门涉及TypeScript。虽然它是JavaScript的派生产品,但您编写代码的方式不同,因此这是目前唯一与TypeScript相关的提问。

3
你确定你需要一个 JSON 字符串吗?看起来它只需要一个对象。但是,你可以使用 JSON.stringify 将任何对象(假设它没有循环引用)转换为 JSON 字符串。请注意不要改变原意。 - Mike Cluck
谢谢Mike,我会尝试将其作为一个对象,但仍然保留这个问题,因为它可能对其他人(或未来的我)有用 :) - user1567453
5个回答

253

只需使用 JSON.stringify(object)。它是内置于Javascript中的,因此也可以在Typescript中使用。


因为它解释了我为什么可以在 TypeScript 中使用 JSON.stringify,所以我可能会选择这个作为答案。还有8分钟才能接受 XD,我会看看会出现什么。 - user1567453
3
按照以下指南提供适当的对象定义,这将无法正常工作,因为所有键都将使用私有变量名称(如果您的私有成员使用下划线)。请参考链接:https://www.typescriptlang.org/docs/handbook/classes.html#public-private-and-protected-modifiers - jarodsmk
1
@N15M0_jk 是的,我也注意到了。我正在使用JSON.stringify(obj).replace(/"_/g, '"')来解决这个问题。 - HammerNL
我使用了JSON.stringify(object),在https://www.fireboxtools.com/json-tools/json-to-string 上完全没有出现任何问题。 - jitendra rajput

15

TS编译为JS,然后执行。因此,您可以访问JS运行时中的所有对象之一是JSON对象。它包含以下方法:

  • JSON.parse()方法解析JSON字符串,构造由该字符串描述的JavaScript值或对象。
  • JSON.stringify()方法将JavaScript对象或值转换为JSON字符串。

示例:

const jsonString = '{"employee":{ "name":"John", "age":30, "city":"New York" }}';


const JSobj = JSON.parse(jsonString);

console.log(JSobj);
console.log(typeof JSobj);

const JSON_string = JSON.stringify(JSobj);

console.log(JSON_string);
console.log(typeof JSON_string);


8
您可以使用Javascript中提供的标准JSON对象:
var a: any = {};
a.x = 10;
a.y='hello';
var jsonString = JSON.stringify(a);

3

当使用JSON(解析/序列化)方法时要小心。我曾经用于复杂对象,结果发现嵌套的数组中的一些额外对象在序列化整个对象树时都有相同值。

const temp = [];
const t = {
  name: "name",
  etc: [{
    a: 0
  }],
};
for (let i = 0; i < 3; i++) {
  const bla = Object.assign({}, t);
  bla.name = bla.name + i;
  bla.etc[0].a = i;
  temp.push(bla);
}

console.log(JSON.stringify(temp));


2
这可能是因为Object.assign不会深度克隆一个对象。因此,所有的实例都共享同一个etc数组,在每次迭代中被修改,所以你最终会在所有这些数组中得到2。这与JSON.stringify无关。 - Jan Papenbrock

0

如果你正在使用 fs-extra,你可以使用 writeJson 函数跳过 JSON.stringify 部分:

const fsExtra = require('fs-extra');

fsExtra.writeJson('./package.json', {name: 'fs-extra'})
.then(() => {
  console.log('success!')
})
.catch(err => {
  console.error(err)
})

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接