在对一个Firebase对象进行JSON.stringify后,数据丢失了。
在对一个Firebase对象进行JSON.stringify后,数据丢失了。
我有一个与Firebase相关联的应用程序。当用户登录时,我将他的对象firebase.auth().currentUser
赋值给一个变量。然后,我给该变量添加一个属性(username
)。问题是,当我console.log(currentUser)
时,我可以看到添加了属性的对象。但是,当我尝试JSON.stringify
和JSON.parse
(我这样做是为了将其存储在localStorage
中)时,我找不到我添加的username
属性。这里发生了什么?
var currentUser = firebase.auth().currentUser currentUser.username = 'Foo'; console.log(currentUser) // => 这里我能看到我的属性username console.log(JSON.parse(JSON.stringify(currentUser))) // => 这里我找不到我添加的属性
问题的原因是currentUser
不是一个普通的对象,而是User class的实例。User类实现了toJSON()
方法,JSON.stringify
会自动检测并使用该方法将对象转换为JSON的规范方式。
要向Firebase用户合并自定义属性,可以先添加toJSON()
方法:
var currentUser = firebase.auth().currentUser.toJSON();
这将把User对象转换为普通对象,然后可以添加其他属性,并按预期进行序列化。然而,请注意,这个转换不会在服务器端或firebase.auth().currentUser
上持久化。
非常感谢,Bleigh!你无法想象我为了找到这个答案搜索了多少个小时!在Angular中,如果你使用(user$ | async)
,就会在HTML中打印出“普通”对象。但是每次我在TS中尝试操作它时...就会抛出错误!使用toJSON()
只会得到“好”的属性-易于操作且不会出错!谢谢!