dongyu4455 2013-07-16 12:11
浏览 70
已采纳

从JSON和XML转换时实现相同的数组结构

I'm trying to build my first public API, which is going pretty fine, but i ran into some trouble converting different data formats that will get POSTed. Basically, the API should accept both JSON and XML, and now i'm trying to convert those into a common PHP array structure.

For JSON my example looks like this:

$people = array( array('name' => 'casper',
                       'shoesize' => 41
                 ),
                 array('name' => 'christine',
                       'shoesize' => 37
                 )
);

$data = json_encode($people);
return json_decode($data);

This will result in:

[{"name":"casper","shoesize":"41"},{"name":"charlotte","activated":"1"}]

The XML example is as follows:

$xml = '<?xml version="1.0"?>'.
       '<people>'.
           '<person>'.
               '<name>casper</name>'.
               '<shoesize>41</shoesize>'.
           '</person>'.
           '<person>'.
               '<name>christine</name>'.
               '<shoesize>37</name>'.
           '</person>'.
       '</people>';

$xml = simplexml_load_string($xml);
$data = json_encode($xml);
return json_decode($data);

This will result in:

{"person":[{"name":"casper","shoesize":"42"},{"name":"christina","shoesize":"12"}]}

Can anyone figure out how i will be able to achieve the same array structure in both examples?

  • 写回答

1条回答 默认 最新

  • duanliang789262 2013-07-16 12:27
    关注

    i think this could help you :-

     $xml = '<?xml version="1.0"?>'.
       '<people>'.
           '<person>'.
               '<name>casper</name>'.
               '<shoesize>41</shoesize>'.
           '</person>'.
           '<person>'.
               '<name>christine</name>'.
               '<shoesize>37</shoesize>'.
           '</person>'.
       '</people>';
     $xml = simplexml_load_string($xml);
     $data = json_encode($xml);
    echo '<pre>';
     $dataarray=(json_decode($data,true));
    $requiredarray=$dataarray['person'];
    print_r($requiredarray);
    

    Output :-

    Array
    (
        [0] => Array
            (
                [name] => casper
                [shoesize] => 41
            )
    
        [1] => Array
            (
                [name] => christine
                [shoesize] => 37
            )
    
    )
    
    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?