您好,登錄后才能下訂單哦!
在PHP中如何處理JSON數組以及對象?很多新手對此不是很清楚,為了幫助大家解決這個難題,下面小編將為大家詳細講解,有這方面需求的人可以來學習下,希望你能有所收獲。
在 PHP 中處理 JSON 數組以及對象
與客戶端混淆的常見原因是圍繞 JSON 數組和對象,以及如何在 PHP 中指定他們。特別是,問題是由空對象和數組對象引起的,此頁面將向您展示 Elasticsearch JSON API 中使用的一些常見模式,以及如何將其轉換為 PHP 的表現形式。
空對象
Elasticsearch API 在多個位置上使用空的 JSON 對象,這可能會給 PHP 帶來問題。與其他語言不同,PHP 沒有空對象的「簡短」表現形式。因此許多開發人員不知道如何指定空對象。
考慮在查詢中添加突出顯示:
{ "query" : { "match" : { "content" : "quick brown fox" } }, "highlight" : { "fields" : { "content" : {} (1) } } }
1.這個空的 JSON 對象是導致問題的原因。
問題是 PHP 會自動轉換 "content" : {} 成 "content" : [],這樣將不再是有效的 Elasticsearch DSL。我們需要告訴 PHP 空對象是一個顯示對象,而不是數組 。 在 PHP 中 定義此查詢, 您可以:
$params['body'] = array( 'query' => array( 'match' => array( 'content' => 'quick brown fox' ) ), 'highlight' => array( 'fields' => array( 'content' => new \stdClass() (1) ) ) ); $results = $client->search($params);
我們使用通用的 PHP stdClass 對象來表示一個空對象,JSON 將會被正確解碼。
通過使用顯示的 stdClass 對象,我們可以強制使用 json_encode 解析器正確的輸出空對象,而不是空數組。 遺憾的是,這個冗長的解決方案,是在 PHP 中實現目標的唯一方法...... 并沒有空對象的「簡短」版本。
對象數組
Elasticsearch DSL 中的另一種常見模式是對象數組。例如,考慮為查詢添加排序:
{ "query" : { "match" : { "content" : "quick brown fox" } }, "sort" : [ (1) {"time" : {"order" : "desc"}}, {"popularity" : {"order" : "desc"}} ] }
1.「sort」包含一組 JSON 對象
這種安排很常見,但是 PHP 的結構可能很復雜。 因為他需要嵌套數組。PHP 的冗長往往會掩蓋實際發生的事。要構造一個對象數組,實際上需要一個數組數組 :
$params['body'] = array( 'query' => array( 'match' => array( 'content' => 'quick brown fox' ) ), 'sort' => array( (1) array('time' => array('order' => 'desc')), (2) array('popularity' => array('order' => 'desc')) (3) ) ); $results = $client->search($params);
1.該數組對 "sort" : [] 數組進行編碼
2.該數組對 {"time" : {"order" : "desc"}} 對象進行編碼
3.該數組對 {"popularity" : {"order" : "desc"}} 對象進行編碼
如果您使用 5.4+ 以上的版本,我強烈建議你使用短數組語法。它使這些嵌套數組更容易閱讀:
$params['body'] = [ 'query' => [ 'match' => [ 'content' => 'quick brown fox' ] ], 'sort' => [ ['time' => ['order' => 'desc']], ['popularity' => ['order' => 'desc']] ] ]; $results = $client->search($params);
空對象數組
有時, 您會遇到前面兩種模式的 DSL . 這個得分函數的查詢是一個很好的例子,有時他需要一個空的對象數組,其中一些對象可能是空的 JSON 對象。
例如這種查詢:
{ "query":{ "function_score":{ "functions":[ { "random_score":{} } ], "boost_mode":"replace" } } }
我們可以使用以下 PHP 代碼構建它:
$params['body'] = array( 'query' => array( 'function_score' => array( 'functions' => array( (1) array( (2) 'random_score' => new \stdClass() (3) ) ) ) ) ); $results = $client->search($params);
1.它對對象數組進行編碼: "functions" : []
2.它對數組中的對象進行編碼: { "random_score": {} }
3.T 它對空的 JSON 對象進行編碼: "random_score": {}
看完上述內容是否對您有幫助呢?如果還想對相關知識有進一步的了解或閱讀更多相關文章,請關注億速云行業資訊頻道,感謝您對億速云的支持。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。