簡體   English   中英

無法將序列化的數據返回到可引用的json對象中

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM