You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP字符串转JSON实现及去重后JSON结构异常修复咨询

解决PHP输出JSON格式不符合预期的问题

你的问题核心在于每次循环单独输出JSON片段,导致最终结果是多个独立的JSON字符串,而非一个完整的JSON数组。我们需要先把所有符合条件的记录收集到一个数组中,最后统一编码输出,就能得到你想要的格式。

修改后的index.php代码

<?php
// PART A
require 'conn.php';
$query = "SELECT STAFFID FROM TABLE";
$result = oci_parse($conn, $query);
oci_execute($result);
$arr = []; // 初始化空数组,避免未定义警告
while ($row = oci_fetch_array($result,OCI_NUM)){
    $arr[] = $row[0];
}
// PART B
$url="http://localhost/fetch_data.php";
$ch = curl_init();
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_URL,$url);
$result=curl_exec($ch);
curl_close($ch);

// 初始化数组存储最终结果
$finalArray = [];
foreach(json_decode($result) as $result2) {
    if(!in_array($result2[0],$arr)) {
        // 直接将原始数组添加到结果数组,不需要拼接字符串
        $finalArray[] = $result2;
    }
}

// 最后一次性输出完整的JSON数组
echo json_encode($finalArray, JSON_PRETTY_PRINT); // JSON_PRETTY_PRINT可选,用于格式化输出
?>

关键修改点说明

  1. 初始化结果数组:创建$finalArray来存放所有符合去重条件的记录,而不是每次循环直接输出。
  2. 避免字符串拼接:$result2本身就是从fetch_data.php返回的数组,直接把它加入结果数组即可,不需要手动拼接成字符串。
  3. 统一编码输出:循环结束后,用json_encode处理整个结果数组,这样会自动生成外层方括号和正确的元素分隔逗号。
  4. 可选格式化:添加JSON_PRETTY_PRINT参数可以让输出的JSON更易读,和你给出的期望格式完全一致。

这样修改后,输出就会是标准的JSON数组格式了。

内容的提问来源于stack exchange,提问作者Rzj Hayabusa

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:26:42