Как конвертировать на json через php? - PullRequest
1 голос
/ 27 мая 2020

Я обнаружил проблему с преобразованием <string xmlns="http://tempuri.org/"> в json в php, я пытаюсь найти пример, но не все.

Это мой php скрипт:

public function register() {
        $url = 'https://example.com/register';

        $post_data="Email=frank@email.com";

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded; charset=utf-8'));   
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
        $result = curl_exec($ch);
        echo $result;
    }

и вот ответ:

enter image description here

Пожалуйста, помогите мне решить эту проблему.

Спасибо

Ответы [ 3 ]

0 голосов
/ 28 мая 2020

Я согласен с комментарием Найджела о том, что странно вставлять JSON в XML, но IMO его решение играет немного быстро и свободно с предполагаемой простотой ввода. Кроме того, DOMDocument и семейство, как правило, намного проще в использовании, поскольку PHP s XML libs go.

$in = <<<_E_
<?xml version="1.0" encoding="utf-8"?>
<string xmlns="http://tempuri.com/">[
    {
        "foo": "bar"
    }
]</string>
_E_;

$doc = new DomDocument();
$doc->loadxML($in);
$json = $doc->getElementsByTagName('string')->item(0)->nodeValue;
$decoded = json_decode($json, true);

var_dump($json, $decoded);

Вывод:

string(24) "[
    {
        "foo": "bar"
    }
]"

array(1) {
  [0]=>
  array(1) {
    ["foo"]=>
    string(3) "bar"
  }
}

https://www.php.net/manual/en/book.dom.php

0 голосов
/ 28 мая 2020

Наконец, я нашел решение, подобное этому:

public function register() {
        $url = 'https://example.com/register';

        $post_data="Email=frank@email.com";

        $ch = curl_init();
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt($ch, CURLOPT_POST, true);
        curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-Type: application/x-www-form-urlencoded; charset=utf-8'));   
        curl_setopt($ch, CURLOPT_POSTFIELDS, $post_data);
        curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); 
        $result = curl_exec($ch);

        $xml = simplexml_load_string($result,'SimpleXMLElement',LIBXML_NOCDATA);
        header('Content-Type: application/json');
        $temp = json_decode($xml);
        $json = json_encode($temp[0]);
        echo $json;
    }

и оно работает;

0 голосов
/ 27 мая 2020

Это странная идея отправлять JSON в документе XML, но все равно. Самый простой (разумный способ) - загрузить его с помощью Simple XML, а затем JSON - это просто текст узла root ...

$xml = simplexml_load_string($result);
echo (string)$xml;

должен дать

[
    {
    "CreateDate": "123"
    }
]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...