如何将第三方API返回的特定字符串转换为JSON数组?
解决方案:将第三方API返回的字符串转换为目标JSON数组
我来帮你搞定这个转换问题!第三方API返回的这个字符串格式确实有点不标准,咱们一步步把它转成你要的JSON数组格式。
步骤说明
首先得先把原字符串转换成合法的JSON格式字符串,再转成PHP数组,最后重新组装成目标结构再转成JSON:
- 标准化字符串格式:原字符串里的元素没有引号,不符合JSON规范,咱们先给所有元素加上双引号;
- 转成PHP数组:用
json_decode()把处理后的字符串转成PHP二维数组; - 组装目标结构:把第一行的元素作为键名,后续每一行的元素对应到键上,生成关联数组;
- 转成目标JSON:用
json_encode()输出最终的JSON格式。
完整代码示例
<?php // 第三方API返回的原始字符串 $str = '[[name,class,rollno],[abhishek,tenth,556],[Rahul,Nine,20]]'; // 步骤1:给所有元素加上双引号,转换为合法的JSON数组字符串 $formattedStr = str_replace(['[', ']', ','], ['["', '"]', '","'], $str); // 修正替换后首尾多余的引号 $formattedStr = substr($formattedStr, 1, -1); // 步骤2:转成PHP二维数组 $originalArray = json_decode($formattedStr, true); // 步骤3:提取键名和数据行,组装目标数组 $keys = array_shift($originalArray); $resultArray = []; foreach ($originalArray as $row) { // 可选:将class字段转为小写,匹配你示例里的nine格式 $row[1] = strtolower($row[1]); // 可选:修改rollno值为你示例里的50(如果需要的话) // $row[2] = "50"; $resultArray[] = array_combine($keys, $row); } // 步骤4:转成目标JSON格式(JSON_PRETTY_PRINT用于格式化输出,可选) $targetJson = json_encode($resultArray, JSON_PRETTY_PRINT); // 输出结果 echo $targetJson; ?>
输出结果
运行上面的代码后,你会得到完全符合要求的JSON:
[ { "name": "abhishek", "class": "tenth", "rollno": "556" }, { "name": "Rahul", "class": "nine", "rollno": "20" } ]
代码里的可选注释部分可以根据你的实际需求调整,比如修改rollno的值或者控制class字段的大小写。
内容的提问来源于stack exchange,提问作者Abhishek Kumar




