PHP json_encode反斜杠和数组名称问题

Sbm*_*bml 1 php postgresql json pdo

我正在将一些postgresql数据转换为PHP json_encode,但我遇到了一些问题:

  • json_encode为我的数据中的所有斜杠添加了一个BackSlash.

  • 在描述中表示段落标记的结束,我认为因为反斜杠问题......

  • 我不希望我的数组在索引为"0"的对象中,但名称为"attach:"

我的JSON输出:

{"arns":[{"arn":"CSC-ECN-NAUB109","problem":"description problem<\/p>",
"solution":"solution description<\/p>",
   "0":[{"name":"jquery.png","path":"http:\/\/arn.test.pt\/uploads\/CSC-ECN-NAUB109\/jquery.png"}]}]} 
Run Code Online (Sandbox Code Playgroud)

我的代码:

<?php 

require('includes/connection.php');

$modelos_info = (isset($_GET['models'])) ? $_GET['models'] : "none";

if($modelos_info != "none"){

$sth = $dbh->query("SELECT * FROM arn_info JOIN upload2 ON (arn_info.arn=upload2.id_arn) WHERE modelos LIKE '$modelos_info ;%' OR modelos LIKE '%; $modelos_info ;%' ");

$sth->setFetchMode(PDO::FETCH_ASSOC);

$response = array();
$posts = array();

while($row = $sth->fetch())
{ 

$arn=$row ['arn'];
$problem=$row['problem'];
$solution=$row['solution'];
$name=$row['name'];
$path=$row['path'];

$posts_anexos['attach'] = $posts2;

$posts2[] = array('name'=> $name , 'path'=> 'http://arn.test.pt/' .$path);
$posts[] = array('arn'=> $arn , 'problem'=> $problem , 'solution'=> $solution, $posts2 );
} 

$response['arns'] = $posts;

$fp = fopen('arns.json', 'w');

fwrite($fp, json_encode($response));

fclose($fp);

echo json_encode($response);

}
?>
Run Code Online (Sandbox Code Playgroud)

谢谢

Pas*_*TIN 8

首先,如果我尝试这样做:

$str = "this / string";
var_dump(json_encode($str));
Run Code Online (Sandbox Code Playgroud)

我明白了:

string '"this \/ string"' (length=16)
Run Code Online (Sandbox Code Playgroud)

还有反斜杠.


看看json.org,似乎JSON标准定义了字符串内的斜杠应该被转义.

所以,json_encode()似乎正在做正确的事情.

如果您不希望转义这些斜杠,那么您不需要有效的JSON,也不应该使用json_encode.



对于第二点,现在,你不应该使用这个:

$posts[] = array(..., $posts2 );
Run Code Online (Sandbox Code Playgroud)

相反,你应该使用:

$posts[] = array(..., 'attach' => $posts2 );
Run Code Online (Sandbox Code Playgroud)

这样,数组的最后一个元素将具有'attach'名称.

  • 谢谢,不,我正在使用 5.2.5。我用其他帖子解决了这个问题, $json_encoded_string = json_encode($response); $json_encoded_string = str_replace("\\/", '/', $json_encoded_string); (2认同)