Я конвертирую некоторые данные postgresql в PHP json_encode, но у меня есть некоторые проблемы:
json_encode добавляет BackSlash ко всем чертам, которые у меня есть в моих данных.
В описаниях появляется закрытие тега абзаца, я думаю, потому что проблема обратной косой черты …
и я не хочу, чтобы мой массив внутри объекта с именем с индексом «0», но с именем «attach:»
МОЙ JSON OUTPUT:
{"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.org , кажется, что стандарт JSON определяет, что косые черты внутри строк должны быть экранированы.
Итак, json_encode()
кажется, делает правильные вещи.
Если вы не хотите, чтобы эти косые черты были экранированы, тогда вы не хотите иметь действительный JSON и не должны работать с json_encode
.
Во-вторых, теперь вы не должны использовать это:
$posts[] = array(..., $posts2 );
Вместо этого вы должны использовать:
$posts[] = array(..., 'attach' => $posts2 );
Таким образом, последний элемент массива будет иметь имя «attach».