Как я могу получить содержимое объекта массива simpleXML при кодировании его в JSON? - PullRequest
0 голосов
/ 23 ноября 2010

У меня есть функция php, которая извлекает и возвращает данные твитов из твиттера как объект simplexml. Я могу получить их содержимое с помощью синтаксиса php.Вот функция php

<?php

    function searchResults($q) {
    $host = "http://search.twitter.com/search.atom?q=" . urlencode( $q ) . "&rpp=100";
    $ch = curl_init();
    curl_setopt($ch, CURLOPT_URL, $host);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, TRUE);

    //Raw xml
    $result = curl_exec($ch);
    curl_close($ch);
    $xml = simplexml_load_string($result);
    return $xml;
    }            
?>

Если я назову это как

$xml = searchResults('xyz');

Я могу получить его содержимое как

echo $xml->content.''.$xml->author->name;

Теперь мне нужно вернуть его из phpфункция в формате JSON.Как

return json_encode($xml);

, несмотря на

return $xml;

Так как теперь я получаю из него содержимое «content», «author-> name» и т. Д. В формате JSON при декодировании json,

Ответы [ 2 ]

2 голосов
/ 23 ноября 2010

Если вам не нужен XML по любой другой причине, кроме как вернуть его как JSON, почему бы не использовать формат json в качестве ответа на вызов API Twitter?http://search.twitter.com/search.json?q=blablabla Возвращает ответ в виде строки JSON, который вы можете просто вернуть.

Я бы переписал ваш код следующим образом:

<?php

function searchResults($q) {
    $host = "http://search.twitter.com/search.json?q=" . urlencode( $q ) . "&rpp=100";

    $raw_json = file_get_contents($host);

    return $raw_json;
}

?>
1 голос
/ 23 ноября 2010

Это зависит. Если вы обращаетесь к нему из PHP, есть два способа:

$obj = json_decode($json);
echo $obj->author->name;

или

$arr = json_decode($json, true);
echo $arr['author']['name'];

Если вы обращаетесь к нему с помощью JavaScript, оно должно быть:

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