[英]Cannot get serialized data back into referenceable json object
我从firebase(谷歌的云数据库)得到一个JSON响应,其中包含我使用JSON.stringify
保存在浏览器的sessionStorage中的用户数据。
当我尝试使用JSON.parse
将数据解析回JSON对象时,以便可以引用JSON结构内的键/值对时,我会在控制台中不断获取文本或空白对象。
我可以来回字符串化和解析并将其记录下来,但是我无法像通常从firebase一样将其解析为“漂亮的JSON对象”。 (在控制台中单击它,它将扩展JSON的树)
function renderLabsCharts(doc){
var tmpDoc = sessionStorage.getItem('doc1');
console.log('tempdoc ' + tmpDoc)
var tmpJson = JSON.parse(tmpDoc);
console.log('stringy temp doc'+JSON.stringify(tmpDoc))
var ans = tmpJson[0];
console.log('ans ' + ans)
console.log('tmpjson ' + tmpJson)
var labTime = tmpJson.labTestDate;
console.log('labTime ' + labTime)
labTime = JSON.stringify(labTime)
console.log('labTime '+JSON.stringify(labTime))
var labTimeDate = labTime.toDate();
记录结果
tempdoc {"labName":"LabCorp","labResult":"111","labTestDate":{"seconds":4100775060,"nanoseconds":0},"labTestName":"EST SENSITIVE (E2)","labUnits":"mL","stdRange":"a3333","uid":"WYqIp9f0dJR8F7OJrMAsk2if6as1"}
appLabs.js:499 stringy temp doc"{\"labName\":\"LabCorp\",\"labResult\":\"111\",\"labTestDate\":{\"seconds\":4100775060,\"nanoseconds\":0},\"labTestName\":\"EST SENSITIVE (E2)\",\"labUnits\":\"mL\",\"stdRange\":\"a3333\",\"uid\":\"WYqIp9f0dJR8F7OJrMAsk2if6as1\"}"
appLabs.js:501 ans undefined
appLabs.js:502 tmpjson [object Object]
appLabs.js:507 labTime [object Object]
appLabs.js:509 labTime "{\"seconds\":4100775060,\"nanoseconds\":0}"
appLabs.js:510 Uncaught TypeError: labTime.toDate is not a function
at renderLabsCharts (appLabs.js:510)
at HTMLFormElement.<anonymous> (appLabs.js:209)
当我尝试访问JSON对象的键/值对时,出现错误,因为未定义。
labTime
已经在JavaScript对象表示法中,您再次调用stringify
,因此labTime
是不是JSON的字符串,因此显然是错误的。
更正的代码
var labTime = tmpJson.labTestDate;
var labTimeSeconds = labTime.seconds;
//convert to date here
虽然前面的答案指出对象中有toDate
函数,但我想分享有关console.log的另一件事。
在控制台中不断获取空白对象的原因是您使用+
登录console.log('string ' + object)
函数。
当Javascript看到类似于'string' +
的语法时,它执行隐式类型转换,它等于Javascript的字符串连接。 因此,它将对象转换为String。
更多: MDN算术运算符语言
您可以通过这种方式打印实际的对象树console.log('some text:', object)
。
function renderLabsCharts(doc){ var tmpDoc = '{"labName":"LabCorp","labResult":"111","labTestDate":{"seconds":4100775060,"nanoseconds":0},"labTestName":"EST SENSITIVE (E2)","labUnits":"mL","stdRange":"a3333","uid":"WYqIp9f0dJR8F7OJrMAsk2if6as1"}'; console.log('tempdoc ' + tmpDoc); var tmpJson = JSON.parse(tmpDoc); // console.log('stringy temp doc'+JSON.stringify(tmpDoc)) // var ans = tmpJson[0]; // console.log('ans ' + ans) console.log('tmpjson :' , tmpJson) var labTime = tmpJson.labTestDate; console.log('labTime :' , labTime) // labTime = JSON.stringify(labTime) // console.log('labTime '+JSON.stringify(labTime)) var labTimeDate = labTime.toDate(); } renderLabsCharts();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.