JavaScript无法解析Amazon API JSON响应,获取FormattedPrice返回undefined
嘿,我来帮你搞定这个问题!先看看你拿到的JSON结构——它是嵌套的对象(用{}包裹),不是数组,所以你尝试的数组下标写法(比如Result[0])肯定行不通,这大概率是问题所在。
先把你的JSON响应格式化一下,看得更清楚:
{ "Result": { "Data": { "Title": "HALO 3 (XBOX 360 - REGION FREE)", "FormattedPrice": "$19.95", "Source": "Product Description", "Content": "The epic saga continues..." } } }
核心问题分析
这里的Result和Data都是对象,不是数组(数组是[]),所以不能用[0]这种数组索引去访问它们的属性。你最开始写的var price1 = Response.Result.Data.FormattedPrice;其实是正确的路径,但可能有其他隐藏问题导致返回undefined,我给你列几个排查方向:
1. 确认响应是否已解析为JavaScript对象
很多时候从API拿到的原始响应是JSON字符串,不是可直接访问的JS对象。如果没解析就去访问属性,肯定会返回undefined。比如用fetch请求的话,需要先调用.json()方法解析:
// 举个fetch请求的例子 fetch('你的Amazon API接口地址') .then(rawResponse => rawResponse.json()) // 把JSON字符串转成JS对象 .then(parsedResponse => { const price = parsedResponse.Result.Data.FormattedPrice; console.log(price); // 这里应该能正常输出$19.95 });
如果是用XMLHttpRequest,也要记得用JSON.parse()解析响应文本:
const xhr = new XMLHttpRequest(); xhr.open('GET', '你的Amazon API接口地址'); xhr.onload = function() { const parsedResponse = JSON.parse(xhr.responseText); const price = parsedResponse.Result.Data.FormattedPrice; console.log(price); }; xhr.send();
2. 检查变量名和属性名的拼写/大小写
JavaScript是大小写敏感的!比如你要是把FormattedPrice写成formattedPrice,或者把Response写成response(小写开头),都会导致找不到属性返回undefined。一定要严格匹配JSON里的属性名。
3. 排除变量名冲突
确认你的Response变量确实指向了API返回的完整对象,有没有其他代码不小心覆盖了这个变量?可以先在控制台打印console.log(Response),看看输出的结构是不是和你给出的JSON一致。
正确访问写法示例
当响应已经被正确解析为JS对象后,直接用对象属性链访问即可:
// 假设parsedResponse是解析后的API响应对象 const price = parsedResponse.Result.Data.FormattedPrice; console.log(price); // 输出: $19.95
内容的提问来源于stack exchange,提问作者GenesisBits

