PHP Web服务返回JSON结构不符预期,请求代码修正方案
修正PHP Web服务的JSON输出结构
我看了你的代码和需求,问题出在处理分类数据的方式上——你现在是把拆分后的分类数组直接塞进$jsonData,所以输出的是嵌套数组结构,而不是你想要的每个元素都是独立对象的数组。另外还要提醒你,原代码直接把用户输入拼进SQL语句,存在严重的SQL注入风险,我会一起帮你修正这个问题。
修改后的完整代码
$customer_id = $_POST['customer_id']; $jsonData = array(); // 使用预处理语句避免SQL注入风险 $qry = "SELECT category FROM nesbaty_customer where c_id = ?"; $stmt = mysqli_prepare($con, $qry); mysqli_stmt_bind_param($stmt, "s", $customer_id); mysqli_stmt_execute($stmt); $result = mysqli_stmt_get_result($stmt); while ($array = mysqli_fetch_assoc($result)) { $categories = explode(",", $array['category']); // 遍历每个分类,生成{"category": "xxx"}的目标结构 foreach ($categories as $cat) { $jsonData[] = array('category' => trim($cat)); // trim处理分类值前后可能的空格 } } echo json_encode(array('data' => $jsonData)); mysqli_stmt_close($stmt); mysqli_close($con);
关键修改说明
- SQL安全优化:替换直接拼接SQL的写法为预处理语句,通过绑定参数彻底避免SQL注入,这是Web服务开发的基础安全规范
- 数据结构调整:不再直接将
explode得到的数组添加到$jsonData,而是遍历拆分后的每个分类值,创建包含category键的关联数组再推入目标数组,这样就能生成你需要的对象数组结构 - 细节优化:添加
trim($cat)处理分类值前后可能存在的空格,避免输出不必要的空白字符
验证输出
修改后运行代码,返回的JSON会完全符合你的预期:
{"data":[{"category":"Hotel"},{"category":"Saloon"}]}
内容的提问来源于stack exchange,提问作者Jayvirsinh Vaghela
相关产品推荐
相关产品推荐

