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

PHP多JSON接口数据合并输出格式异常问题求助

如何合并多个JSON接口数据并输出合法JSON结构?

我明白你现在遇到的问题了——直接输出两个接口的JSON结果会导致它们硬拼接在一起,变成[...][...]这种不符合JSON规范的格式,因为JSON要求整个文档只能有一个顶级结构(要么是数组,要么是对象)。

先看看你之前代码里的问题:

  • $json3=json.json2;这行是完全无效的PHP语法,直接删掉就行
  • 连续两次echo json_encode(...)相当于把两个独立的JSON数组直接拼在一起,这肯定会导致格式错误

下面给你两种可行的解决方案,你可以根据自己的需求选择:

方案1:合并为一个顶级数组

如果希望最终输出的是一个包含所有频道和服务数据的大数组,可以用array_merge把两个解码后的数组合并,再统一编码输出:

<?php
// 获取两个接口的JSON内容
$channelsJson = file_get_contents('http://ip/api/channels.php');
$servicesJson = file_get_contents('http://ip/api/services.php');

// 解码为PHP关联数组
$channelsData = json_decode($channelsJson, true);
$servicesData = json_decode($servicesJson, true);

// 合并两个数组的元素到一个新数组
$combinedData = array_merge($channelsData, $servicesData);

// 编码为合法的JSON并输出
echo json_encode($combinedData);
?>

这种方式输出的JSON结构是一个大数组,里面包含了原来两个数组的所有元素,格式完全合法。

方案2:包装为JSON对象(更推荐)

如果想更清晰地区分不同模块的数据(比如频道和服务),可以把两个数组装进一个关联数组里,最终输出一个JSON对象,这样前端可以很方便地通过键名获取对应的数据:

<?php
$channelsJson = file_get_contents('http://ip/api/channels.php');
$servicesJson = file_get_contents('http://ip/api/services.php');

$channelsData = json_decode($channelsJson, true);
$servicesData = json_decode($servicesJson, true);

// 用关联数组包装两个数据集,对应JSON的键值对
$combinedData = [
    'channels' => $channelsData,
    'services' => $servicesData
];

// 编码输出
echo json_encode($combinedData);
?>

这种方式输出的JSON结构大概是这样的:

{
  "channels": [
    {"cat":"Kids", "cat_ar":"اطفال", ...},
    {"cat":"Sports", "cat_ar":"رياضة", ...}
  ],
  "services": [
    {"title":"enterprise", "data":{...}, ...},
    {"title":"peruser", "data":{...}, ...}
  ]
}

这是标准的JSON对象格式,完全符合语法要求,而且结构更清晰,后续维护也更方便。

另外,建议你在使用file_get_contents的时候加上错误处理,避免因为接口请求失败导致的错误:

if (!$channelsJson) {
    // 处理获取channels接口失败的情况,比如返回错误JSON
    echo json_encode(['error' => 'Failed to fetch channels data']);
    exit;
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.27 09:26:16