使用PHP解析Amazon PA-API 5返回JSON获取DisplayValues的问题
解决方案
你当前读取Locale字段的逻辑是正确的,DisplayValues是Features节点下的数组类型字段,不能直接用echo输出整个数组,需要遍历数组获取每一条值,或者按索引读取指定位置的内容。修改后的代码如下:
// 将JSON字符串转为关联数组 $someArray = json_decode($response, true); $productosMaximos = count($someArray['SearchResult']['Items']); // 最多取前8个商品,和原有逻辑效果一致 $productosMaximosFuncion = min($productosMaximos - 1, 7); for ($i = 0; $i <= $productosMaximosFuncion; $i++) { $currentItem = $someArray['SearchResult']['Items'][$i]; // 输出DisplayValues内容 if (isset($currentItem['ItemInfo']['Features']['DisplayValues'])) { $displayValues = $currentItem['ItemInfo']['Features']['DisplayValues']; echo "商品ASIN:" . $currentItem['ASIN'] . " 特性列表:<br>"; // 遍历数组输出每一条特性 foreach ($displayValues as $idx => $val) { echo ($idx + 1) . ". " . $val . "<br>"; } echo "<hr>"; } // 原有读取Locale的逻辑可保留,新增判存避免报错 if (isset($currentItem['ItemInfo']['Features']['Locale'])) { echo "Locale值:" . $currentItem['ItemInfo']['Features']['Locale'] . "<br>"; } }
注意事项
- 代码新增了
isset判断,避免部分商品未返回Features字段时抛出PHP警告 - 如果不需要逐条处理
DisplayValues的内容,也可以用implode直接拼接成字符串输出,示例:echo implode('<br>', $displayValues) - 原有计算最大遍历数的逻辑可以简化为
min($productosMaximos - 1, 7),和你原有的if判断效果完全一致
内容的提问来源于stack exchange,提问作者Kokojambo
相关产品推荐
相关产品推荐

