[英]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.