2016-04-26 92 views
-1

我有一个mysql表,有几列,其中之一是'详细'包含json字符串 - 其中包含6个键。php json_encode()将引号添加到json从mysql中检索

{ 
    "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] 

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

我知道当我回声json_encode我得到的结果是什么原因导致,在PHP中:

{“日期”:“2016年4月22日 十四点50分24秒”,“速度” : “0”, “详细”: {\” ×\ “:[ - 0.02,-O ...](... REST OF OUTPUT ...)} }

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

我的问题是,如何从mySQL中检索所述JSON列,然后在PHP中回显它,因此我不必再次在PHP中对它进行编码 - 它在花括号中添加了引号。

+0

为什么downvote ? – Johnny

回答

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); 
2

你需要json_encoding之前解析JSON:

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

'JSON.parse'它是javascript函数,你在php中。 – jcubic

+0

@jcubic:修正,谢谢。 –