Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带有反斜杠和数组名的PHP json_编码问题_Php_Postgresql_Pdo_Json - Fatal编程技术网

带有反斜杠和数组名的PHP json_编码问题

带有反斜杠和数组名的PHP json_编码问题,php,postgresql,pdo,json,Php,Postgresql,Pdo,Json,我正在将一些postgresql数据转换为PHP json_encode,但我有一些问题: json_encode将反斜杠添加到数据中的所有斜杠中 在段落标记的结尾处,我想是因为反斜杠的问题 我不希望我的数组位于索引为“0”但名称为“attach:”的对象中: 我的JSON输出: {"arns":[{"arn":"CSC-ECN-NAUB109","problem":"description problem<\/p>", "solution":"solution descript

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

  • json_encode将反斜杠添加到数据中的所有斜杠中

  • 在段落标记的结尾处,我想是因为反斜杠的问题

  • 我不希望我的数组位于索引为“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"}]}]} 
<?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);

}
?>
{“arn”:[{“arn”:“CSC-ECN-NAUB109”,“问题”:“描述问题”,
“解决方案”:“解决方案说明”,
“0”:[{“名称”:“jquery.png”,“路径”:“http:\/\/arn.test.pt\/uploads\/CSC-ECN-NAUB109\/jquery.png”}
我的代码:

{"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"}]}]} 
<?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);

}
?>

关于第一点,如果我尝试这样做:

$str = "this / string";
var_dump(json_encode($str));
我得到:

string '"this \/ string"' (length=16)
还有反斜杠


看看,JSON标准似乎定义了字符串中的斜杠应该转义

因此,
json\u encode()
似乎做了正确的事情

如果不希望转义这些斜杠,那么就不需要有效的JSON,也不应该使用
JSON\u encode



对于第二点,现在,您不应该使用:

$posts[] = array(..., $posts2 );
相反,您应该使用:

$posts[] = array(..., 'attach' => $posts2 );

这样,数组的最后一个元素将具有“attach”名称。

对于第一点,如果我尝试这样做:

$str = "this / string";
var_dump(json_encode($str));
我得到:

string '"this \/ string"' (length=16)
还有反斜杠


看看,JSON标准似乎定义了字符串中的斜杠应该转义

因此,
json\u encode()
似乎做了正确的事情

如果不希望转义这些斜杠,那么就不需要有效的JSON,也不应该使用
JSON\u encode



对于第二点,现在,您不应该使用:

$posts[] = array(..., $posts2 );
相反,您应该使用:

$posts[] = array(..., 'attach' => $posts2 );

这样,数组的最后一个元素将具有“attach”名称。

是的,您在两点上是对的,有没有建议使用json_编码?没有真正的建议,没有:使用有效的json可能比重新发明轮子、尝试重写某些内容更好。或者如果您使用PHP>=5.3.0,请使用
json_编码($posts,JSON\u FORCE\u OBJECT)
谢谢,不,我使用的是5.2.5。我解决了其他post的问题,$JSON\u encoded\u string=JSON\u encode($response);$JSON\u encoded\u string=str\u replace(“\\\/”,“/”,$JSON\u encoded\u string);可以转义斜杠,然后不必使用(就像您可以将“a”写为“\u0061”。反斜杠和双引号需要转义(因为它们在语法的其他部分(即转义和结束字符串以及控制字符)中很重要),但其他字符不需要。RFC中给出的语法——非常明确。是的,你在两点上是对的,有没有建议使用json编码来代替json编码?没有真正的建议,没有:使用有效的json可能比重新发明轮子,试图重写一些东西更好。或者如果你使用PHP>=5.3.0,使用
json\encode($posts,JSON\u FORCE\u OBJECT)
谢谢,不,我用的是5.2.5。我用其他post解决了这个问题,$JSON\u encoded\u string=JSON\u encode($response);$JSON\u encoded\u string=str\u replace(“\\\/”,“/”,$JSON\u encoded\u string”);前斜杠可以转义,然后就不需要了(就像您可以将“a”写为“\u0061”。反斜杠和双引号需要转义(因为它们在语法的其他部分(即转义和结束字符串以及控制字符)中很重要),但其他字符不需要转义。RFC中给出的语法是显式的。