【问题标题】:Do JSON.stringify() and JSON.parse() change data type?JSON.stringify() 和 JSON.parse() 是否更改数据类型?
【发布时间】:2020-06-22 00:05:18
【问题描述】:

????我需要一点帮助来更好地理解 JSON。

当我用类对象对数组进行字符串化然后将其解析回来时,看起来数组丢失了类实例。即使在解析 JSON 数据后,我是否可以保留课程,如果可以,如何?为什么会发生这种情况?

代码如下:

class Account {
    constructor(site, login, pass) {
        this.site = site,
        this.login = login
        this.pass = pass
    }
}
const accounts = [
    new Account("website1.com", "email1@gmail.com", "12345"),
    new Account("website2.com", "email2@gmail.com", "23456")
]
console.log('BEFORE', accounts)


const string = JSON.stringify(accounts)
console.log(string)


const parseString = JSON.parse(string)
console.log('AFTER', parseString)

控制台显示如下:

BEFORE (2) [Account, Account]
{string: "[{"site":"website1.com","login":"email1@gmail.com"….com","login":"email2@gmail.com","pass":"23456"}]"}
AFTER (2) [{…}, {…}]

为了清楚起见,是否可以在 JSON.parse()` 后面加上 [Account, Account]

如果我的解释不清楚,请告诉我。 非常感谢!

【问题讨论】:

  • 传入一个自定义的reviver 参数,但请注意,它不是一个特别健壮的 API

标签: javascript json


【解决方案1】:

JSON 不支持对象、数组、null、字符串、数字和布尔值以外的类型。

如果您对 JSON 的预期有所了解,则可以在解析期间使用 reviver 函数。对于您的示例,这就足够了:

JSON.parse(string, (k, v) => v.hasOwnProperty('site')
                             ? new Account(v.site, v.login, v.pass)
                             : v);

【讨论】:

    【解决方案2】:

    JavaScript 有两种有用的方法来处理 JSON 格式的内容: JSON.stringify() 和 JSON.parse(),这对作为一对学习很有用。 JSON.stringify() 接受一个 JavaScript 对象,然后将其转换为 JSON 字符串。 JSON.parse() 接受 JSON 字符串,然后将其转换为 JavaScript 对象。

    【讨论】:

      【解决方案3】:

      我从您的问题中了解到,您希望将已解析的 JSON 字符串转换为您的帐户对象原型。为了实现,您可以使用以下代码,因为 JSON.parse() 返回 Javascript 对象,我们明确需要将其转换为我们的自定义对象原型(即您的情况下的帐户)。

      const string = JSON.stringify(accounts)
      console.log(string);
      
      const parseString = JSON.parse(string);
      
      objectFromJson = function (parseString){
          var temp = [];
          for( var i = 0; i < parseString.length; i++) {
             temp.push(new Account (parseString[i].site, parseString[i].login, parseString[i].pass));
          }
          return temp;
      };
      
      var accountArray = objectFromJson(parseString);
      console.log('AFTER', accountArray);
      

      【讨论】:

        猜你喜欢
        • 2014-07-06
        • 2018-03-10
        • 2016-02-19
        • 1970-01-01
        • 2015-01-25
        • 2022-01-25
        • 2015-08-18
        • 2017-10-04
        相关资源
        最近更新 更多