先说说核心判断:在构建 API 或进行前后端数据交互时,JSON 格式的一致性直接影响着接口的可用性。不少开发者会在数组与字符串的转换上栽跟头——明明想要一个数组,结果得到的却是个字符串。
具体到这个场景:你有一段 PHP 代码,用 `'tgas' => $tagsoutput` 这种方式直接把逗号分隔的字符串赋值给了键 `tgas`。这样一来,最终 JSON 输出的会是 `"tgas":"tag1,tag2,tag3"`,一个纯字符串,而非期待的 `["tag1", "tag2", "tag3"]` 数组格式。
问题的症结很清楚:要想产出 `{"tgas": ["tag1", "tag2", "tag3"]}` 这样的结构,必须先把原始字符串按逗号解析成 PHP 的索引数组,剩下的事情交给 `json_encode()` 就好——它能自动把索引数组序列化为 JSON 数组。这其实是个很标准的数据预处理流程。
正解:用 explode() 拆分字符串
直接看代码会更直观:
$title,
'plot' => strip_tags($description),
'storline' => strip_tags($storyline), // ⚠️ 字段名疑似拼写错误,可能是 'storyline'
'tgas' => explode(',', $tagsoutput) // ✅ 返回 ['tag1', 'tag2', 'tag3']
);
$rt = json_encode($response, JSON_UNESCAPED_UNICODE); // 推荐 JSON_UNESCAPED_UNICODE,替代废弃的 true
需要注意几个细节:
- `json_encode($response, true)` 里的 `true` 在 PHP 8.2+ 中已经弃用,属于无效参数。更规范的做法是用 `JSON_UNESCAPED_UNICODE` 这类标准常量,或者干脆不传第二个参数走默认行为。
- 如果 `$tagsoutput` 可能为空、为 null,或者压根不含逗号,最好加点容错逻辑,避免生成 `['']` 或空数组。一个比较稳健的做法:
'tgas' => !empty($tagsoutput) ? array_filter(array_map('trim', explode(',', $tagsoutput))) : []
这条处理链路执行了三件事:先用 `explode()` 拆分,再用 `array_map('trim', ...)` 去除每项的首尾空格,最后用 `array_filter()` 过滤掉空值。
- 代码中的 `'storline'` 这个字段名,看起来像是 `'storyline'` 的拼写错误。建议根据实际数据库或业务逻辑核对键名,否则前端解析时可能会对不上号。
小结
JSON 数组的生成说到底依赖的是 PHP 的数据结构本身。只要 `tgas` 对应的值是一个索引数组,`json_encode()` 就会准确输出方括号格式。把 `explode()`、`array_map('trim', ...)` 和 `array_filter()` 这三个函数组合起来用,处理标签类字符串的转换基本就够用了——干净、准确,且不容易出错。