calamansi_grenade
calamansi_grenade

Reputation: 61

Convert SimpleXML to JSON PHP

I am using Bigbluebutton's PHP API and I want to get all meeting sessions. In calling the method to display the meetings, I get this output:

Array (

[returncode] => SimpleXMLElement Object
    (
        [0] => SUCCESS
    )

[messageKey] => SimpleXMLElement Object
    (
    )

[message] => SimpleXMLElement Object
    (
    )

[0] => Array
    (
        [meetingId] => SimpleXMLElement Object
            (
                [0] => as's meeting
            )

        [meetingName] => SimpleXMLElement Object
            (
                [0] => as's meeting
            )

        [createTime] => SimpleXMLElement Object
            (
                [0] => 1380878550574
            )

        [attendeePw] => SimpleXMLElement Object
            (
                [0] => ap
            )

        [moderatorPw] => SimpleXMLElement Object
            (
                [0] => mp
            )

        [hasBeenForciblyEnded] => SimpleXMLElement Object
            (
                [0] => false
            )

        [running] => SimpleXMLElement Object
            (
                [0] => false
            )

    )

[1] => Array
    (
        [meetingId] => SimpleXMLElement Object
            (
                [0] => XYZ's meeting
            )

        [meetingName] => SimpleXMLElement Object
            (
                [0] => XYZ's meeting
            )

        [createTime] => SimpleXMLElement Object
            (
                [0] => 1380879253000
            )

        [attendeePw] => SimpleXMLElement Object
            (
                [0] => ap
            )

        [moderatorPw] => SimpleXMLElement Object
            (
                [0] => mp
            )

        [hasBeenForciblyEnded] => SimpleXMLElement Object
            (
                [0] => false
            )

        [running] => SimpleXMLElement Object
            (
                [0] => true
            )

    )

)

How can I turn this simplexml top json?

Upvotes: 5

Views: 14574

Answers (2)

Signal
Signal

Reputation: 927

Here is why this is a very bad idea.

$xml     = '<root><test><line code="line1">hello</line><line code="line2">world</line></test></root>';
$element = new \SimpleXMLElement($xml);
$json    = json_encode($element);

If you look at the output of json_encode, it will be as follows:

{"test":{"line":["hello","world"]}}

You just lost all of your attributes due to having repeated elements. There is no "simple" solution, you have to use a custom piece of code that will cycle through each element and format it properly. If you do try to access the element through $element, you can still get the attributes because SimpleXML is not a regular PHP class.

I came up with a solution that will work for the example I gave, and for typical problems, although it does not handle namespaces.

http://pastebin.com/ksSqkJbu

Upvotes: 1

CharliePrynn
CharliePrynn

Reputation: 3082

You can use json_encode. http://php.net/manual/en/function.json-encode.php

json_encode($array)

Upvotes: 11

Related Questions