首页 > 解决方案 > 在 result_array() 中解码数据库结果中存储的 JSON 值

问题描述

我想从存储在 db 中的 json 中提取值,但我无法弄清楚。这是我的数据库的样子:

+-------------------+-------------------------------------------------+---------------------+---------------------+
| refid             |                      kepribadian                | jam_mulai           | jam_selesai         |
+-------------------+-------------------------------------------------+---------------------+---------------------+
| GAD25D335B0F1DE3B | {"Introversion":"53.3%","Extroversion":"46.7%"} | 2019-08-09 01:16:00 | 2019-08-09 01:19:46 |
| GAD25D32DAE90578A | {"Introversion":"63.3%","Extroversion":"34.7%"} | 2019-08-09 08:55:47 | 2019-08-09 08:56:48 |
+-------------------+-------------------------------------------------+---------------------+---------------------+

这是我的模型:

public function filter_hasil_mbti($search, $limit, $start, $order_field, $order_ascdesc)
{

    $sql =  $this->db->select('a.id AS id, a.refid AS refid, CONCAT(b.firstname," ",b.lastname) AS fullname, a.kepribadian AS kepribadian, a.jam_mulai AS jam_mulai, a.jam_selesai AS jam_selesai, a.percentage AS percentage')
            ->from('jawaban_mbti as a')
            ->join('registrasi_baru as b', 'a.refid=b.refid', 'left')
            ->like('a.refid', $search)
            ->or_like('b.firstname', $search)
            ->or_like('b.lastname', $search)
            ->or_like('a.kepribadian', $search)
            ->or_like('a.jam_mulai', $search)
            ->or_like('a.jam_selesai', $search)
            ->order_by($order_field, $order_ascdesc)
            ->limit($limit, $start)
            ->get()->result_array();

    return $sql;
}

所以,我可以访问列 kepribadian json 作为键并将其全部存储在 result_array() 我该怎么做?

谢谢你。

更新

这是我的控制器:

public function ajax_jawaban_mbti()
{
    $search         = $_POST['search']['value'];
    $limit          = $_POST['length'];
    $start          = $_POST['start'];
    $order_index    = $_POST['order'][0]['column'];
    $order_field    = $_POST['columns'][$order_index]['data'];
    $order_ascdesc  = $_POST['order'][0]['dir'];

    $sql_total      = $this->mhasil->count_all_Soal('jawaban_mbti');
    $sql_data       = $this->mhasil->filter_hasil_mbti($search, $limit, $start, $order_field, $order_ascdesc);
    $sql_filter     = $this->mhasil->count_filter_hasil_mbti($search);

    //print_r($sql_data);die;

    $callback       = array(
        'draw'              => $_POST['draw'],
        'recordsTotal'      => $sql_total,
        'recordsFiltered'   => $sql_filter,
        'data'              => $sql_data,
    );

    //header('Content-Type: application/json');
    echo json_encode($callback);
}

标签: phpcodeigniter

解决方案


您可以使用 json_decode 将其转换为如下数组:

例子:

 $json = '{"Introversion":"53.3%","Extroversion":"46.7%"}';
 $array = json_decode($json)
 var_dump($array);

我建议将变量的名称从 $sql 更改为 $results 因为您返回的是数组而不是 sql

更新1:

foreach ($sql as $key => $val) {
// you can add in the second argument of json_decode 1 to have a array instead of a object.
if(isset($val['kepribadian']))
    $sql[$key]['kepribadian'] = json_decode($val['kepribadian']);
}

结果将是这样的:

    Array
(
    [0] => Array
        (
            [kepribadian] => stdClass Object
                (
                    [Introversion] => 53.3%
                    [Extroversion] => 46.7%
                    [Sense] => 66.7%
                    [Intuition] => 33.3%
                    [Thingking] => 46.7%
                    [Feeling] => 53.3%
                    [Judging] => 66.7%
                    [Perceiving] => 33.3%
                )

        )

    [1] => Array
        (
            [id] => 1337
            [refid] => GAD25D335B0F1DE3B
            [fullname] => Ravhi Rizaldi
            [kepribadian] => 
            [jam_mulai] => 2019-08-09 01:16:00
            [jam_selesai]] => 2019-08-09 01:19:46
        )

)

推荐阅读