将不熟悉的数据格式转换为数组/对象/ JSON

时间:2012-08-17 17:26:33

标签: php solr solarium

我正在使用一个库(Solarium用于Solr),它返回的结果是我不熟悉的格式。下面的代码块显示了库函数返回的结果print_r($resultset)$resultset的输出。

我希望它是一种格式(可能是数组?),我在那里进一步按摩数据,并将其转换为最终格式JSON。我怎样才能做到这一点? json_encode($resultset)刚刚给了我一个空的JSON字符串{}

原始格式的数据

Solarium_Result_Select Object
(
    [_numfound:protected] => 
    [_documents:protected] => 
    [_components:protected] => 
    [_status:protected] => 
    [_queryTime:protected] => 
    [_parsed:protected] => 
    [_response:protected] => Solarium_Client_Response Object
        (
            [_headers:protected] => Array
                (
                    [0] => HTTP/1.1 200 OK
                    [1] => Server: Apache-Coyote/1.1
                    [2] => Content-Type: text/plain;charset=UTF-8
                    [3] => Date: Fri, 17 Aug 2012 17:21:14 GMT
                    [4] => Connection: close
                )

            [_body:protected] => {"responseHeader":{"status":0,"QTime":0,"params":{"fl":"*,score","start":"0","q":"*:*","wt":"json","rows":"2"}},"response":{"numFound":232,"start":0,"maxScore":1.0,"docs":[{"id":"1045","title":"White dress","description":"Ohhh its white omg fav color","score":1.0},{"id":"1046","title":"Darker tones","description":"Man this looks scary, the ring? Ultra fast transfer speeds: Armor A80's outstanding read/write speed is coupled with the latest USB 3.0 interface and is backwards compatible with USB 2.0. The USB 3.0 interface features a 5 Gbps/sec bandwidth which is 10x the bandwidth of a USB 2.0 interface. It saves users precious time backing up to and from the hard drive when transferring mass data files. Water, pressure, vibration & dust proof.","score":1.0}]}}
            [_statusCode:protected] => 200
            [_statusMessage:protected] => OK
        )

    [_data:protected] => 
    [_query:protected] => Solarium_Query_Select Object
        (
            [_options:protected] => Array
                (
                    [handler] => select
                    [resultclass] => Solarium_Result_Select
                    [documentclass] => Solarium_Document_ReadOnly
                    [query] => *:*
                    [start] => 0
                    [rows] => 2
                    [fields] => *,score
                )

            [_componentTypes:protected] => Array
                (
                    [facetset] => Array
                        (
                            [component] => Solarium_Query_Select_Component_FacetSet
                            [requestbuilder] => Solarium_Client_RequestBuilder_Select_Component_FacetSet
                            [responseparser] => Solarium_Client_ResponseParser_Select_Component_FacetSet
                        )

                    [dismax] => Array
                        (
                            [component] => Solarium_Query_Select_Component_DisMax
                            [requestbuilder] => Solarium_Client_RequestBuilder_Select_Component_DisMax
                            [responseparser] => 
                        )

                    [morelikethis] => Array
                        (
                            [component] => Solarium_Query_Select_Component_MoreLikeThis
                            [requestbuilder] => Solarium_Client_RequestBuilder_Select_Component_MoreLikeThis
                            [responseparser] => Solarium_Client_ResponseParser_Select_Component_MoreLikeThis
                        )

                    [highlighting] => Array
                        (
                            [component] => Solarium_Query_Select_Component_Highlighting
                            [requestbuilder] => Solarium_Client_RequestBuilder_Select_Component_Highlighting
                            [responseparser] => Solarium_Client_ResponseParser_Select_Component_Highlighting
                        )

                    [grouping] => Array
                        (
                            [component] => Solarium_Query_Select_Component_Grouping
                            [requestbuilder] => Solarium_Client_RequestBuilder_Select_Component_Grouping
                            [responseparser] => Solarium_Client_ResponseParser_Select_Component_Grouping
                        )

                    [spellcheck] => Array
                        (
                            [component] => Solarium_Query_Select_Component_Spellcheck
                            [requestbuilder] => Solarium_Client_RequestBuilder_Select_Component_Spellcheck
                            [responseparser] => Solarium_Client_ResponseParser_Select_Component_Spellcheck
                        )

                    [distributedsearch] => Array
                        (
                            [component] => Solarium_Query_Select_Component_DistributedSearch
                            [requestbuilder] => Solarium_Client_RequestBuilder_Select_Component_DistributedSearch
                            [responseparser] => 
                        )

                    [stats] => Array
                        (
                            [component] => Solarium_Query_Select_Component_Stats
                            [requestbuilder] => Solarium_Client_RequestBuilder_Select_Component_Stats
                            [responseparser] => Solarium_Client_ResponseParser_Select_Component_Stats
                        )

                    [debug] => Array
                        (
                            [component] => Solarium_Query_Select_Component_Debug
                            [requestbuilder] => Solarium_Client_RequestBuilder_Select_Component_Debug
                            [responseparser] => Solarium_Client_ResponseParser_Select_Component_Debug
                        )

                )

            [_fields:protected] => Array
                (
                    [*] => 1
                    [score] => 1
                )

            [_sorts:protected] => Array
                (
                )

            [_filterQueries:protected] => Array
                (
                )

            [_components:protected] => Array
                (
                )

            [_helper:protected] => 
            [_params:protected] => Array
                (
                )

        )

    [_client:protected] => Solarium_Client Object
        (
            [_options:protected] => Array
                (
                    [adapter] => Solarium_Client_Adapter_Http
                    [adapteroptions] => Array
                        (
                            [host] => 127.0.0.1
                            [port] => 8080
                            [path] => /solr/
                        )

                )

            [_queryTypes:protected] => Array
                (
                    [select] => Array
                        (
                            [query] => Solarium_Query_Select
                            [requestbuilder] => Solarium_Client_RequestBuilder_Select
                            [responseparser] => Solarium_Client_ResponseParser_Select
                        )

                    [update] => Array
                        (
                            [query] => Solarium_Query_Update
                            [requestbuilder] => Solarium_Client_RequestBuilder_Update
                            [responseparser] => Solarium_Client_ResponseParser_Update
                        )

                    [ping] => Array
                        (
                            [query] => Solarium_Query_Ping
                            [requestbuilder] => Solarium_Client_RequestBuilder_Ping
                            [responseparser] => Solarium_Client_ResponseParser_Ping
                        )

                    [mlt] => Array
                        (
                            [query] => Solarium_Query_MoreLikeThis
                            [requestbuilder] => Solarium_Client_RequestBuilder_MoreLikeThis
                            [responseparser] => Solarium_Client_ResponseParser_MoreLikeThis
                        )

                    [analysis-document] => Array
                        (
                            [query] => Solarium_Query_Analysis_Document
                            [requestbuilder] => Solarium_Client_RequestBuilder_Analysis_Document
                            [responseparser] => Solarium_Client_ResponseParser_Analysis_Document
                        )

                    [analysis-field] => Array
                        (
                            [query] => Solarium_Query_Analysis_Field
                            [requestbuilder] => Solarium_Client_RequestBuilder_Analysis_Field
                            [responseparser] => Solarium_Client_ResponseParser_Analysis_Field
                        )

                    [terms] => Array
                        (
                            [query] => Solarium_Query_Terms
                            [requestbuilder] => Solarium_Client_RequestBuilder_Terms
                            [responseparser] => Solarium_Client_ResponseParser_Terms
                        )

                    [suggester] => Array
                        (
                            [query] => Solarium_Query_Suggester
                            [requestbuilder] => Solarium_Client_RequestBuilder_Suggester
                            [responseparser] => Solarium_Client_ResponseParser_Suggester
                        )

                )

            [_pluginTypes:protected] => Array
                (
                    [loadbalancer] => Solarium_Plugin_Loadbalancer
                    [postbigrequest] => Solarium_Plugin_PostBigRequest
                    [customizerequest] => Solarium_Plugin_CustomizeRequest
                    [parallelexecution] => Solarium_Plugin_ParallelExecution
                    [bufferedadd] => Solarium_Plugin_BufferedAdd
                    [prefetchiterator] => Solarium_Plugin_PrefetchIterator
                )

            [_pluginInstances:protected] => Array
                (
                )

            [_adapter:protected] => Solarium_Client_Adapter_Http Object
                (
                    [_options:protected] => Array
                        (
                            [host] => 127.0.0.1
                            [port] => 8080
                            [path] => /solr
                            [core] => 
                            [timeout] => 5
                        )

                )

            [_requestBuilders:protected] => 
        )

)

PHP代码

public function action_search() {

    Solarium_Autoloader::register();
    $client = new Solarium_Client();

    $query = $client
                ->createSelect()
                ->setRows(2);

    $resultset = $client->select($query);

    echo "<pre>";
    print_r($resultset);

    $result = json_encode($resultset);
    echo $result;

3 个答案:

答案 0 :(得分:1)

根据Solarium docs,我会尝试这样的事情:

/*...*/
$resultset = $client->select($query);

$results = array();
foreach($resultset as $document) {
    $item = array();
    foreach($document as $field => $value) {
        $item[$field] = $value;
    }
    $results[] = $item;
}
echo json_encode($results);

答案 1 :(得分:1)

$resultset = $client->select($query);

$result_array = json_decode($resultset->getResponse()->getBody())->response->docs;
$result = json_encode($result_array);
echo $result;

结果将是

[{"id":"1045","title":"White dress","description":"Ohhh its white omg fav color","score":1.0},{"id":"1046","title":"Darker tones","description":"Man this looks scary, the ring? Ultra fast transfer speeds: Armor A80's outstanding read/write speed is coupled with the latest USB 3.0 interface and is backwards compatible with USB 2.0. The USB 3.0 interface features a 5 Gbps/sec bandwidth which is 10x the bandwidth of a USB 2.0 interface. It saves users precious time backing up to and from the hard drive when transferring mass data files. Water, pressure, vibration & dust proof.","score":1.0}]

答案 2 :(得分:0)

响应对象有很多字段和函数,你通常想要返回响应,

echo json_encode($resultset->getData());