2017-01-04 2 views
0

Я написал REST Апи, используя тонкую структуру 3, и возвращая ответ в формате JSON, как это,Отправить XML строку в объект JSON с помощью PHP тонкий

return $response->withHeader(
     'Content-type', 
     'application/json; charset=utf-8' 
    )->withJson($data, 200); 

, который работает отлично.

$xml = '<?xml version="1.0" encoding="UTF-8"?><dialog createdBy=""createDate=""><dialog>' // looks like this 

$data = [ 
    'name' => 'xmlName', 
    'xml' => $xml // fetching from db 
] 

Теперь у меня есть XML-строка, хранящаяся в базе данных и хочет отправить его на сторону клиента, я должен сохранить этот XML-строку, как и в другой базе данных, как это.

Но когда я кодирую строку xml, мой json получает перерыв.

Я также попытался как,

json_encode($data, JSON_HEX_TAG); 

, который преобразует мой XML в.

"\u003C?xml version=\"1.0\" encoding=\"UTF-8\"?\u003E\n\u003Cdialog createdBy=\"\" 

Как правильно закодировать xml в JSON, а затем вернуть исходную строку xml так, как она есть?

Ваш отзыв очень ценится.

ответ

0

Если вы посмотрите на исходный код withJson(), вы увидите, что все, что он делает с данными, обрабатывает его с помощью json_encode() -Нечего особенного на тонкой стороне. Фактически, ваш XML просто отлично: \u003C и \u003E являются объектами для < и >. Помните, что JSON - это формат данных для компьютеров, а не для людей!

Кроме того, в JSON spec указано, что у вас должен быть объект или массив верхнего уровня. Поэтому вы не можете просто отправить строку обратно клиенту и ожидать, что он будет обработан как JSON, потому что это не будет JSON. Если json_encode() не просто падает, это связано с тем, что он был разработан для кодирования частичного JSON, поскольку это полезная функция несколько раз. Вы абсолютно необходимо разработать действующую структуру JSON, например .:

->withJson(array($xml), 200) 
+0

На самом деле я кодировал массив, в этом массиве существует строка xml. –

+0

Тогда вы закончили :) –

0

На самом деле я только что нашел мой ответ на намек htmlentities @ Альваро Гонсалес дал. Я просто конвертируются мой XML-строку, как,

[ 
    'name' => 'xmlName', 
    'xml' => htmlentities($xml) 
] 

Я могу получить строку XML, как это без JSon перерыва.

+0

'htmlentities()' просто повредит ваш XML (или, по крайней мере, заставит принимающую сторону отменить кодировку). Почему, по-вашему, вам это нужно? –

+0

Его работа отлично, я думаю, если я передам $ xml как есть, мой json получит перерыв. Вот почему я использовал htmlentities(). Так что мой json не получил перерыв, и мне не нужно его отменить. Я получаю точно такую ​​же строку. –

+0

Вы должны делать что-то еще, о чем не говорили (например, отображать XML в браузере или обрабатывать данные с помощью некоторой библиотеки). Этот сайт должен быть коллективной базой знаний, и каждый, кто попадает сюда, получит неправильное впечатление о том, что 'json_encode()' сломан или неполный, что, конечно же, не так. –

Смежные вопросы