CodeIgniter输出数据库结果为有效JSON数组的问题求助
解决CodeIgniter中数据库查询结果生成有效JSON数组的问题
看起来你是在循环输出数据库每行的JSON字符串,导致最终输出是多个独立的JSON对象拼接在一起,这肯定不是合法的JSON数组格式——合法的数组需要用[]把所有对象包裹起来,每个对象之间用逗号分隔。
先说说问题出在哪:如果你的代码是类似下面这样(循环每行单独编码输出),那必然会生成无效JSON:
// 错误写法示例 public function coa($id) { $data['listcoa'] = $this->easyw->get_coa_data($id); // 假设这是你的查询方法 foreach ($data['listcoa'] as $row) { echo json_encode($row); // 每行单独输出JSON对象,拼接后无效 } }
这种方式输出的结果会是{"0":"1.1"...}{"0":"1.1"...},没有数组包裹,也没有分隔逗号,完全不符合JSON规范。
正确的做法:先收集所有结果到数组,再统一编码输出
你只需要先把查询到的所有行数据放到一个数组里,然后对整个数组执行一次json_encode(),就能得到你想要的合法JSON数组格式了。
示例代码如下:
public function coa($id) { // 1. 获取完整的查询结果数组(CodeIgniter的查询方法一般会返回多行数组) $listcoa = $this->easyw->your_query_function($id); // 替换成你实际的查询方法 // 2. (可选)如果需要对每行数据做处理,比如重命名字段、修改值 $formatted_results = []; foreach ($listcoa as $row) { // 这里可以根据需求调整数据结构 $formatted_row = [ '0' => $row['0'], '1' => $row['1'], '2' => $row['2'] ]; $formatted_results[] = $formatted_row; } // 3. 设置正确的响应头,告诉客户端这是JSON数据 header('Content-Type: application/json'); // 4. 对整个数组编码输出,直接得到你想要的格式 echo json_encode($formatted_results); // 5. 记得exit,避免后续输出其他内容破坏JSON格式 exit; }
如果你的查询方法已经直接返回了符合要求的数组(比如CodeIgniter的result_array()方法返回的就是每行为关联数组的二维数组),那甚至可以简化成:
public function coa($id) { $listcoa = $this->easyw->your_query_function($id)->result_array(); header('Content-Type: application/json'); echo json_encode($listcoa); exit; }
这样输出的结果就是你期望的:[{"0":"1.1","1":"KAS & BANK","2":"kosong"}, {"0":"1.1","1":"KAS & BANK","2":"kosong"}, {"0":"1.1","1":"KAS & BANK","2":"kosong"}]
额外注意点
- 一定要设置
Content-Type: application/json响应头,否则客户端可能无法正确解析数据; - 确保输出前没有其他多余的echo、空格或者HTML内容,这些都会破坏JSON的合法性;
- 如果有中文或者特殊字符,记得在
json_encode()里加上JSON_UNESCAPED_UNICODE参数,避免中文被转义:json_encode($formatted_results, JSON_UNESCAPED_UNICODE)
内容的提问来源于stack exchange,提问作者nothing
相关产品推荐
相关产品推荐

