将包含双引号的数据库记录转换为JSON

时间:2018-03-06 13:05:04

标签: php json

我有PostgreSQL数据库,其中包含字符串值包含双引号的列。

示例值: Exploitation field of hydrocarbons "Environment"

我使用PHP来获取包含此记录的表的内容,并将查询结果存储到$queryResult变量。

我使用json_encode()将查询结果转换为JSON,如下所示:

$result = pg_query($query);
$queryResult = array();
while ($row = pg_fetch_row($result)) {
    $queryResult[] = $row;
}
$queryResult_json = json_encode($queryResult);

我想将它用作JS对象,因此我将数据发送到JavaScript:

<script type="text/javascript">
    var myArray = '<?php echo $queryResult_json ?>';
    myArray_object = JSON.parse(myArray);
</script>

问题是,我在控制台中收到错误: Uncaught SyntaxError: Unexpected token O in JSON at position 9163看起来它指向我的字符串中的双引号,因为JSON在值周围使用双引号,因此它无法解析双引号内的双引号。

JSON.parse()遇到问题的字符串部分如下所示: ["0134","Cadastral plan - Exploitation field of hydrocarbons "Environment" - WFS"]

我不能使用.replace()方法,因为它会替换所有双引号,而不仅仅是字符串中的双引号。 有办法解决这个问题吗?

1 个答案:

答案 0 :(得分:3)

$queryResult_json将包含JSON。

问题是'<?php echo $queryResult_json ?>'会生成一个 JavaScript字符串文字,而JSON中的某些字符在字符串文字中有特殊含义......但是你没有逃避它们。

如果你真的想要生成一个JSON的JS字符串,那么你就可以使用json_encode(注意:它会为你生成引号字符,所以不要手动添加它们。)

$queryResult_json = json_encode($queryResult);
$string_of_queryResult_json = json_encode($queryResult_json);

<script type="text/javascript">
var myArray = <?php echo $string_of_queryResult_json ?>;
myArray_object = JSON.parse(myArray);
</script>

...但是,首先将JSON视为JavaScript文字会更容易,更有效。

$queryResult_json = json_encode($queryResult);

<script type="text/javascript">
myArray_object = <?php echo $queryResult_json ?>;
</script>