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

问题描述 投票:-1回答:1

这个问题在这里已有答案:

我有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()方法,因为它会替换所有双引号,而不仅仅是字符串中的双引号。有办法解决这个问题吗?

php json
1个回答
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>
© www.soinside.com 2019 - 2024. All rights reserved.