繁体   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