PHP json_encode Проблема с обратной косой чертой и именем массива - PullRequest
1 голос
/ 11 марта 2011

Я конвертирую некоторые данные 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);

}
?>

Спасибо

1 Ответ

7 голосов
/ 11 марта 2011

Для первого пункта, если я попытаюсь сделать это:

$str = "this / string";
var_dump(json_encode($str));

Я получу:

string '"this \/ string"' (length=16)

С обратной косой чертой тоже.


Глядя на json.org , кажется, стандарт JSON определяет, что косые черты внутри строк должны быть экранированы.

Итак, json_encode(), кажется, делает правильные вещи.

Если вы не хотите, чтобы эти слэши были экранированы, вам не нужен valid-JSON, и он не должен работать с json_encode.


.

Для второго пункта, теперь вы не должны использовать это:

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

Вместо этого вы должны использовать:

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

Таким образом, последний элементмассив будет иметь имя 'attach'.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...