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

Json_encode返回JSON单元格为字符串,如何将subscriptions转为数组适配Json.net?

解决PHP json_encode后subscriptions为字符串的问题

没问题,这事儿很好解决!核心原因应该是你的数据库里subscriptions字段存的是JSON格式的字符串(比如"[1,2,3]"),PHP从数据库读出来后直接保留了字符串类型,所以json_encode的时候就把它当成普通字符串处理了。要转成数组类型,只需要在编码前先把这个字符串解码成PHP数组就行。

具体步骤:

  • 从数据库取出数据行后,对subscriptions字段做JSON解码,转成PHP关联数组(第二个参数传true)
  • 再对整个数据行做json_encode,此时subscriptions就会被序列化为JSON数组,而非字符串

代码示例:

// 假设用PDO从数据库取数据
$stmt = $pdo->prepare("SELECT id, name, subscriptions FROM users WHERE id = ?");
$stmt->execute([1]);
$user = $stmt->fetch(PDO::FETCH_ASSOC);

// 关键:把subscriptions字符串转成PHP数组
if (isset($user['subscriptions']) && !empty($user['subscriptions'])) {
    // json_decode第二个参数为true,返回数组而非对象
    $user['subscriptions'] = json_decode($user['subscriptions'], true);
}

// 现在编码出来的JSON里,subscriptions就是数组类型了
echo json_encode($user);

额外优化(如果用ORM框架):

比如用Laravel的话,可以在模型里定义访问器,自动处理字段转换,不用每次手动解码:

class User extends Model
{
    // 定义访问器,自动把数据库的JSON字符串转成数组
    public function getSubscriptionsAttribute($value)
    {
        // 空值或无效JSON时返回空数组,避免报错
        return json_decode($value, true) ?? [];
    }
}

这样你从模型取出数据时,$user->subscriptions已经是数组了,直接json_encode就能得到符合要求的JSON结构,Json.NET可以完美解析成对应的数组/列表类型。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 06:52:31