我需要帮助导航一个奇怪的JSON响应

sqyvllje  于 2023-03-20  发布在  其他
关注(0)|答案(1)|浏览(123)

我有一个返回以下JSON响应的调用:

{resolved: false, rejected: false, errorHandled: false, handlers: Array(0)}
dispatching: false
errorHandled: false
handlers: []
rejected: false
resolved: true
value: {references: Array(2)}
[[Prototype]]: Object

我正在努力处理响应。我试图向下导航到值键,但控制台将其返回为未定义,并且只会返回第一行括号中的键。

nbnkbykc

nbnkbykc1#

在做了更多的研究之后,我相信我已经找到了这个问题的真实的答案。我把我原来的答案保留在线下,因为它回答了你的书面问题。
您的问题中的响应似乎是一个Zalgo Promise登录在浏览器控制台中。

请注意,value在预览中未定义,但在将预览展开为完整对象后定义(以及“resolved”是如何从false变为true的)。这是因为当记录对象时,预览会显示对象的属性,但当您展开它时,展开的对象显示手动展开时对象的属性。这意味着对象'在将其记录到控制台和在控制台中展开之间,的属性已更改。
为了能够在代码中获得响应的值,你必须等到Zalgo承诺被解析,而不是立即尝试访问它的值。

var value = response.value;
//Do stuff with the value here

您可以改为执行此操作以等待值准备就绪:

response.then(value => {
    //Do stuff with the value here
    //eg. console.log(value.references[0])
});

上面代码中的response应该是您传递给console.log以获得此处问题的响应的任何变量。
如果您有任何问题,请随时在下方留言;得到这个答案与你提出的问题有一点距离。
原始答案(可以忽略,但从技术上回答了您的书面问题):
这个响应没有正确地格式化为JSON,这里的解决方案可能会确保无论你从哪里得到这个响应,首先都会以正确的JSON格式发送它。
如果您在问题中输入的是字符串形式的响应,则尝试重新格式化当前响应以正确解释它是行不通的;您最终会得到具有不同值的重复键(resolvedrejectederrorHandledhandlers),并且您根本无法访问value键中的内容。
一些值得注意的东西可能会帮助您调试此问题:您得到的响应与在浏览器控制台中记录一个对象时看到的响应非常相似。我在这里重新创建了类似的响应:

然而,这并不能解释你的问题中的行为,你可以读一些键,但只能读第一行中显示的键,我不知道那里发生了什么。

相关问题