未读取Javascript对象
当我调用JSON.stringify(有效负载))时,它会被打印出来 但是,当我执行var target=payload.ma steps.temp_token;,这似乎不起作用,我出错了未读取Javascript对象,javascript,html,cordova,Javascript,Html,Cordova,当我调用JSON.stringify(有效负载))时,它会被打印出来 但是,当我执行var target=payload.ma steps.temp_token;,这似乎不起作用,我出错了 参考错误:未定义步数破折号,-,表示减法,因此不能在变量名称中使用payload.ma steps.temp_令牌被视为payload.ma减去steps.temp_令牌。它需要一个名为steps的变量,该变量不存在,因此出现错误“steps未定义” 相反,您可以使用对象表示法访问该属性 {"ma-steps
参考错误:未定义步数破折号,
-
,表示减法,因此不能在变量名称中使用payload.ma steps.temp_令牌
被视为payload.ma
减去steps.temp_令牌
。它需要一个名为steps
的变量,该变量不存在,因此出现错误“steps未定义”
相反,您可以使用对象表示法访问该属性
{"ma-steps":"{\"temp_token\":\"5dsed8dfsfsfdfdfsff0145059bd008a1e1a00247b92880bf9de56b153b289c9463c3dbda9f20f47fb9aca94e82ffba5dc2cd566f4c859\",\"reload_ma\":true}","google.message_id":"0:15917211468dfdsfsdfsd","google.sent_time":345543534}"
似乎ma steps
的值是一个JSON格式的字符串,因此在引用其中的任何属性之前,需要对其进行解析
let target = payload['ma-steps'];
以下是一个工作示例:
var-payload={“ma-steps”:“{“temp\u-token\”:“5DSED8DFSFFDFF0145059BD008A1A00247B92880BF9DE56B153B289C9463C3DBDA9F20F47FB9ACA94E82FFBA5DC2CD566F4C859\”,“reload\u-ma\:true}”,“google.message\u-id:“0:1591721468DFDSFSD”,“google.sent\u-time”:345543534};
让steps=JSON.parse(payload['ma-steps']);
让目标=steps.temp_令牌;
控制台日志(目标)代码>我使用您的对象,它的工作原理与我在前面的评论中所说的相同。也许物体的形状不好
let对象={
“ma步骤”:{
临时令牌:
“5DSED8DFSFFDFF0145059BD008A1E1A00247B92880BF9DE56B153B289C9463C3DBDA9F20F47FB9ACA94E82FFBA5DC2CD566F4C859”,
乌马:是的
},
“google.message_id”:“0:159172111468DFDSD”,
“谷歌发送时间”:345543534
};
log(对象['ma-steps'].temp_令牌);
首先,payload.ma-steps.temp_token==(payload.ma)-(steps.temp_token)
,并将引发异常,除非payload.ma
和steps.temp_token
都已定义且为数字。因此,您希望访问有效负载['ma-steps'].temp_令牌
假设您的对象最初是:
const obj={
“妈妈的脚步声”:{
临时标记:“5DSED8DFSFFDFSFF0145059BD008A1E1A00247B92880BF9DE56B153B289C9463C3DBDA9F20F47FB9AC94E82FFBA5DC2CD566F4C859”,
乌马:是的
},
google.message_id:“0:159172111468dfdsdfsd”,
谷歌发送时间:345543534
};
返回的字符串是JSON.stringify(obj)
:
但是,如果您的对象实际上是:
const obj2={
“ma步骤”:“{”临时令牌\“:\”5DSED8DFSFFDFF0145059BD008A1E1A00247B92880BF9DE56B153B289C9463C3DBDA9F20F47FB9AC94E82FFBA5DC2CD566F4C859\”,“重新加载ma\”:true}”,
google.message_id:“0:159172111468dfdsdfsd”,
谷歌发送时间:345543534
};
JSON.stringify(obj2)
返回您所说的内容:
'{"ma-steps":{"temp_token":"5dsed8dfsfsfdfdfsff0145059bd008a1e1a00247b92880bf9de56b153b289c9463c3dbda9f20f47fb9aca94e82ffba5dc2cd566f4c859","reload_ma":true},"google.message_id":"0:15917211468dfdsfsdfsd","google.sent_time":345543534}'
但是,在本例中,obj2['ma-steps']
是一个字符串,并且没有temp_标记
属性。所以你必须做:
const-ma_-steps_-parsed=JSON.parse(obj2['ma-steps']);
const target=ma_steps_parsed.temp_标记;
payload['ma-steps'].临时令牌;我在temp_token partI上未定义,这两种情况下我都未定义。有效负载['ma-steps']返回{“temp_token”:“dfdsfdsfdsfsd”,“reload_fences”:true}“是的。它就是这样工作的,让steps=JSON.parse(有效负载['ma-steps']));您提供的ma步骤部分可以工作,但reload_ma没有定义。奇怪的是,它可以在web上工作,但不能在使用Cordova的android mobile上工作。所以问题在于Cordova,而不是Javascript对象
'{"ma-steps":{"temp_token":"5dsed8dfsfsfdfdfsff0145059bd008a1e1a00247b92880bf9de56b153b289c9463c3dbda9f20f47fb9aca94e82ffba5dc2cd566f4c859","reload_ma":true},"google.message_id":"0:15917211468dfdsfsdfsd","google.sent_time":345543534}'
'{"ma-steps":"{\"temp_token\":\"5dsed8dfsfsfdfdfsff0145059bd008a1e1a00247b92880bf9de56b153b289c9463c3dbda9f20f47fb9aca94e82ffba5dc2cd566f4c859\",\"reload_ma\": true}","google.message_id":"0:15917211468dfdsfsdfsd","google.sent_time":345543534}'