php json_encode()为从mysql中检索到的json添加引号

时间:2016-04-26 10:58:58

标签: javascript php mysql json ajax

我有一个包含很少列的mysql表,其中一列是详细的'包含json字符串 - 包含6个键。

{
    "x": [
        -0.02,
        -0.04,
        -0.05
    ],
    "y": [
        -0.01,
        0,
        0,
        -0.01
    ],
    "z": [
        0.04,
        0,
        -0.03,
        -0.01
    ],
    "roll": [
        0.5,
        0.6,
        0.6
    ],
    "pitch": [
        -3.4,
        -3.3,
        -3.3
    ],
    "yaw": [
        224.2,
        224.2,
        224.2
    ] }

然后在php中我选择了三列,其中一列是json列。

$sql = "SELECT date, speed, detailed FROM info_table";
$result = $conn->query ( $sql );

if ($result-> num_rows ) {

    while ( $row = $result->fetch_object() ) {
        $rows[] = $row;

    }   
}
echo json_encode($rows);

在JavaScript中,我进行AJAX调用以检索这些值,然后解析它们。

data = JSON.parse(xmlhttp.responseText);

到目前为止一切顺利,当我尝试进入嵌套属性时,返回JSON对象,例如。

data[1].detailed.x[1]

它给了我未定义,因为在详细'之后的所有内容被视为字符串而不是对象。

我知道是什么导致这种情况,在php中,当我回应json_encode的结果时,我得到:

  

{"日期":" 2016年4月22日   14:50:24""速度":" 0""详细":的" {\& #34; x \":[ - 0.02,-0 ...](...... REST OF   输出......)} " }

当我删除大括号周围的粗体引号时,JSON.parse()JavaScript正确地将此嵌套值视为对象而不是字符串。

我的问题是,如何从mySQL中检索所述JSON列,然后在PHP中回显它,这样我就不必再在PHP中对其进行编码 - 这会在大括号中添加引号。

2 个答案:

答案 0 :(得分:3)

如果你已经在db中使用了json,那么你需要在对整个事物进行编码之前对其进行解码:

$sql = "SELECT date, speed, detailed FROM info_table";
$result = $conn->query($sql);

if ($result->num_rows) {

    while ($row = $result->fetch_object()) {
        $row->detailed = json_decode($row->detailed);
        $rows[] = $row;

    }
}
echo json_encode($rows);

答案 1 :(得分:2)

你需要在json_encoding之前解析JSON:

while ( $row = $result->fetch_object() ) {
     $row->detailed = json_decode($row->detailed);
     $rows[] = $row;
}