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