json - Angular 8 JSON.parse 没有完全/公正地解析
问题描述
我收到一个如下所示的 JSON 对象:此数据正在通过 Socketio 发射传递,因此角度 HttpClient 不会拦截它。
{
"single":[
{
"name":"Xavi555",
"data":[
{
"_id":"5e2ea609f8c83e5435ebb6e5",
"id":"test1",
"author":"someone",
"recipient":"someone",
"content":"test",
"msgId":"Testid",
"gNamespace":""
}
]
}
],
"group":[]
}
但是,当我JSON.parse()
在上面的对象上使用时,键data
不包含该值,data
也就是说:
private func(jsonObj: string): void {
console.log(jsonObj);
}
我懂了:
single: Array(1)
groups: Array(0)
single Array(1)
name: test
data: Array(0)
我认为这是深度克隆的问题,但是,当尝试这样做时,JSON.parse(JSON.stringify(jsonObj))
它会返回原始的 json 字符串对象。
相关但未发布解决方案
private handleStoredMessages(dirtyObj: string): void {
// debugger;
const cleanObj = JSON.parse(dirtyObj);
const { single, group } = cleanObj;
console.log('raw json', dirtyObj);
onsole.log('clean json', cleanObj);
}
有任何想法吗?
解决方案
如果您使用的是角度,那么我怀疑您应该使用JSON.parse
. 这是由HttpClient
. 然而,您对数据结构的假设是错误的。是一个对象数组,而single
不是对象本身:
所以要访问.data
你需要做的jsonObj.single[0].data
。它本身又是一个数组
发生这种情况的唯一其他原因是,在您实际按下控制台中的三角形打开对象之前,您在代码中的其他位置修改了对象/数组。将鼠标悬停在蓝色信息图标上以查看原因。
下面的值是刚才评估的
对象被延迟评估,这意味着如果您对对象进行任何转换,它将显示该状态,而不是您记录该对象时的状态。
推荐阅读
- python - DLL加载失败:找不到指定的模块,在python中导入tensorflow_datasets
- html - 如何使多个居中
- spring-restdocs - 如何使用 Spring REST Docs 在请求/响应中记录混合类型的数组结构
- sql - Oracle 空间请求在一个实例上工作而不在另一个实例上工作
- c# - 如何将我的进程与当前应用程序域分开并为该进程创建新域?
- python - Selenium - 如何在 find_element_by_xpath 中使用 AND 条件
- tooltip - Nsis ToolTips 多行文本
- javascript - 如何将数据从一个页面上的表单发送到不同页面上的不同表单?
- reactjs - 如何在 ReactJS 中将 PDF 转换为图像
- python - 当 python 脚本安装为带有 NSSM 的 Windows 服务时,是否可以打印文件?