检索存储在mysql字段中的json字符串

时间:2016-04-27 22:14:43

标签: php mysql

我有一个表,我需要将其作为json回显给js。结构是:

enter image description here

如何在没有额外斜杠的情况下将数据作为json字符串获取?我对在php中处理params或在查询中操作它不感兴趣,它用于存储数据(可能会有很多变化)并将用于js方面。目前不能使用基于文档的数据库。

我遇到了“params”的问题,因为如果我尝试使用stripslashes并使json无效,一些额外的引号仍然存在。

<?php
...
$statement=$pdo->prepare("SELECT params FROM content WHERE id = 19");
$statement->execute();
$results=$statement->fetchAll(PDO::FETCH_ASSOC);
$json=json_encode($results);

$json = stripslashes($json);
var_dump ($results);
echo "<br/>";
echo $json;
?>

2 个答案:

答案 0 :(得分:0)

您的字段已经是JSON字符串。通过对其进行编码,您将获得无效的JSON。

以这种方式写作:

$data = array();
while( $row = $statement->fetch(PDO::FETCH_ASSOC) )
{
    $data[] = ['params'=>json_decode( $row['params'] )];
}

$json = json_encode($data);
echo $json;

这将输出如下的JSON:

[
    {"params":{"sentence1":"city"}},
    (...)
]

如果您不想保留“params”键,可以这样做:

$results=$statement->fetchAll(PDO::FETCH_ASSOC);
$data = array_map( 'json_decode', array_column( $results, 'params' ) );
$json = json_encode($data);
echo $json;

这将输出如下的JSON:

[
    {"sentence1":"city"},
    (...)
]

答案 1 :(得分:0)

可接受的答案有效。此外,如果您要将参数传递给array_map()

中的映射函数

像这样使用回调

array_map(function ($json) { return json_decode($json, true); }, $res);