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

如何从WordPress自定义数据库表取回wp_json_encode数据及解析异常问题

解决WordPress中JSON数据无法解码的问题

看起来你遇到的问题出在获取数据的方式上,咱们一步步来修正:

1. 问题根源:$wpdb->get_results() 返回的不是单个字符串

你现在用$wpdb->get_results()查询,它返回的是一个对象数组(哪怕只有一条结果),而不是直接的reward_details字段值。直接把这个数组传给json_decode()肯定会失败,因为它需要的是合法的JSON字符串。

2. 修正方案:获取正确的JSON字符串

有两种简单的方式拿到目标字符串:

方式一:用get_var()直接获取单个字段值

这是最直接的方式,因为你只需要reward_details这一个字段:

<?php
$project_id = $_SESSION['project_id'];
global $wpdb;

// 用prepare防止SQL注入,这很重要!
$string = $wpdb->get_var( $wpdb->prepare( 
    "SELECT reward_details FROM wpxa_rewards WHERE project_id = %d", 
    $project_id 
) );

// 现在$string是合法的JSON字符串,可以解码了
$someArray = json_decode($string, true);

// 先判断解码是否成功
if (json_last_error() !== JSON_ERROR_NONE) {
    echo "JSON解码失败:" . json_last_error_msg();
} else {
    // 统计奖励数量要取子数组的长度,因为你的JSON是包含三个数组的对象
    $count = count( $someArray['reward_amount'] ); 
    // 接下来就可以正常遍历数据了,比如:
    foreach ($someArray['reward_amount'] as $index => $amount) {
        $title = $someArray['reward_title'][$index];
        $desc = $someArray['reward_description'][$index];
        echo "<p>奖励:$title - $amount 元,描述:$desc</p>";
    }
}
?>

方式二:如果坚持用get_results(),需要提取对象属性

如果你因为某些原因必须用get_results(),要从返回的数组中取出第一个对象的reward_details属性:

<?php
$project_id = $_SESSION['project_id'];
global $wpdb;

$results = $wpdb->get_results( $wpdb->prepare( 
    "SELECT reward_details FROM wpxa_rewards WHERE project_id = %d", 
    $project_id 
) );

$someArray = [];
if (!empty($results)) {
    $string = $results[0]->reward_details;
    $someArray = json_decode($string, true);
    
    // 同样检查解码是否成功
    if (json_last_error() !== JSON_ERROR_NONE) {
        echo "JSON解码失败:" . json_last_error_msg();
    }
}

// 后续操作同上
?>

3. 额外注意事项

  • SQL注入防护:一定要用$wpdb->prepare()来处理查询参数,直接把$_SESSION['project_id']拼进SQL是非常危险的行为。
  • 解码结果判断:每次调用json_decode()后,最好用json_last_error()检查是否解码成功,方便排查问题(比如存储的JSON格式是否有错误)。
  • 数组遍历逻辑:你的JSON结构是包含三个子数组的对象,所以count($someArray)得到的是3(三个键值对),如果你要统计奖励的数量,应该取count($someArray['reward_amount'])。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 03:16:38