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