【问题标题】:turn typescript object into json string将 typescript 对象转换为 json 字符串
【发布时间】:2016-05-23 00:08:06
【问题描述】:

我正在尝试在 typescript 中初始化一个对象,该对象需要 JSON 字符串作为“选项”参数。准确地说是对象here。 options 参数必须是 JSON 字符串,而不是用于初始化 dijit 的对象。

有没有一种方法可以从打字稿对象创建 JSON 字符串而无需手动过程?

请不要链接任何未明确表示“TypeScript”的问题,因为此问题与 TypeScript 相关。虽然 JavaScript 的衍生版本,但您编写代码的方式不同,因此这是目前与 TypeScript 相关的唯一一篇询问此问题的帖子。

【问题讨论】:

  • 您确定需要 JSON 字符串吗?看起来它只需要一个对象。但是您可以使用 JSON.stringify 将任何对象(假设它没有循环)转换为 JSON
  • 谢谢迈克,我会把它作为一个对象试一试,但无论如何都要保留这个问题,因为它将来可能对其他人(或仍然是我)有用:)

标签: javascript json typescript esri


【解决方案1】:

使用这些 JSON.(parse/stringify) 方法时要小心。我对复杂对象做了同样的事情,结果发现一个包含更多对象的嵌入式数组对于我正在序列化的对象树中的所有其他实体具有相同的值。

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));

【讨论】:

  • 这可能是因为 Object.assign 没有深度克隆对象。因此,您的所有实例都共享相同的 etc 数组,然后在每次迭代中对其进行修改,因此您最终应该在所有这些数组中得到 2。这里与 JSON.stringify 无关。
【解决方案2】:

如果您使用的是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)
})

【讨论】:

    【解决方案3】:

    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);

    【讨论】:

      【解决方案4】:

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

      【讨论】:

      • 可能会选择这个作为答案,因为它解释了为什么我可以在 Typescript 中使用 JSON.stringify。 8 分钟前无法接受 XD 会看到弹出的内容。
      • 按照以下指南进行正确的对象定义,这将不起作用,因为所有键都将使用私有变量名称(如果您的私有成员使用下划线)typescriptlang.org/docs/handbook/…
      • @N15M0_jk 是的,我也注意到了。我正在使用 JSON.stringify(obj).replace(/"_/g, '"') 来克服这个问题。
      【解决方案5】:

      您可以使用标准的 JSON 对象,在 Javascript 中可用:

      var a: any = {};
      a.x = 10;
      a.y='hello';
      var jsonString = JSON.stringify(a);
      

      【讨论】:

        猜你喜欢
        • 2019-08-27
        • 2020-05-27
        • 1970-01-01
        • 1970-01-01
        • 2011-04-23
        • 2012-06-14
        • 2012-02-20
        • 2015-01-03
        相关资源
        最近更新 更多