Behandeln Sie JSON-Arrays und -Objekte in PHP

藏色散人
Freigeben: 2023-04-07 07:20:02
nach vorne
3077 Leute haben es durchsucht

Umgang mit JSON-Arrays und -Objekten in PHP

Eine häufige Ursache für Verwirrung bei Clients sind JSON-Arrays und -Objekte und deren Angabe in PHP. Probleme werden insbesondere durch leere Objekte und Array-Objekte verursacht. Diese Seite zeigt Ihnen einige häufig verwendete Muster, die in der Elasticsearch-JSON-API verwendet werden, und wie Sie diese in PHP-Darstellungen konvertieren.

Leere Objekte

Die Elasticsearch API verwendet an mehreren Stellen leere JSON-Objekte, was zu Problemen für PHP führen kann. Im Gegensatz zu anderen Sprachen verfügt PHP nicht über eine „kurze“ Darstellung eines leeren Objekts. Daher wissen viele Entwickler nicht, wie sie leere Objekte angeben.

Erwägen Sie, der Abfrage eine Hervorhebung hinzuzufügen:

{
    "query" : {
        "match" : {
            "content" : "quick brown fox"
        }
    },
    "highlight" : {
        "fields" : {
            "content" : {} (1)
        }
    }
}
Nach dem Login kopieren

1. Dieses leere JSON-Objekt verursacht das Problem.

Das Problem besteht darin, dass PHP automatisch „content“ : {} in „content“ : [] konvertiert, was kein gültiges Elasticsearch-DSL mehr ist. Wir müssen PHP mitteilen, dass das leere Objekt ein Anzeigeobjekt und kein Array ist. Um diese Abfrage in PHP zu definieren, würden Sie Folgendes tun:

$params['body'] = array(
    'query' => array(
        'match' => array(
            'content' => 'quick brown fox'
        )
    ),
    'highlight' => array(
        'fields' => array(
            'content' => new \stdClass() (1)
        )
    )
);
$results = $client->search($params);
Nach dem Login kopieren

Wir verwenden das generische PHP-Objekt stdClass, um ein leeres Objekt darzustellen, und der JSON wird korrekt dekodiert.

Durch die Verwendung eines expliziten stdClass-Objekts können wir den json_encode-Parser zwingen, leere Objekte anstelle leerer Arrays korrekt auszugeben. Leider ist diese langwierige Lösung die einzige Möglichkeit, Ihr Ziel in PHP zu erreichen ... Es gibt keine „kurze“ Version des leeren Objekts.

Array von Objekten

Ein weiteres häufiges Muster im Elasticsearch DSL ist das Array von Objekten. Erwägen Sie beispielsweise das Hinzufügen einer Sortierung zu einer Abfrage:

{
    "query" : {
        "match" : { "content" : "quick brown fox" }
    },
    "sort" : [  (1)
        {"time" : {"order" : "desc"}},
        {"popularity" : {"order" : "desc"}}
    ]
}
Nach dem Login kopieren

1. „sort“ enthält eine Reihe von JSON-Objekten

Diese Anordnung ist üblich, aber die Struktur von PHP kann komplex sein. Weil er verschachtelte Arrays braucht. Die Ausführlichkeit von PHP neigt dazu, zu verschleiern, was tatsächlich vor sich geht. Um ein Array von Objekten zu erstellen, benötigen Sie tatsächlich ein Array von Arrays:

$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);
Nach dem Login kopieren

1 Dieses Array codiert „sort“: [] array

2. {"order" : "desc"}} Objekte werden codiert

3. Das Array ist codiert {"popularity" : {"order" : "desc"}} Objekte

Wenn Sie verwenden Ab Version 5.4 empfehle ich dringend die Verwendung einer kurzen Array-Syntax. Dies erleichtert das Lesen dieser verschachtelten Arrays:

$params['body'] = [
    'query' => [
        'match' => [
            'content' => 'quick brown fox'
        ]
    ],
    'sort' => [
        ['time' => ['order' => 'desc']],
        ['popularity' => ['order' => 'desc']]
    ]
];
$results = $client->search($params);
Nach dem Login kopieren

Array leerer Objekte

Manchmal werden Sie auf die DSL für die beiden vorherigen Muster stoßen Die Funktion ist ein gutes Beispiel. Manchmal benötigt er ein leeres Array von Objekten, von denen einige leere JSON-Objekte sein können.

Zum Beispiel diese Abfrage:

{
   "query":{
      "function_score":{
         "functions":[
            {
               "random_score":{}
            }
         ],
         "boost_mode":"replace"
      }
   }
}
Nach dem Login kopieren

Wir können sie mit dem folgenden PHP-Code erstellen:

$params['body'] = array(
    'query' => array(
        'function_score' => array(
            'functions' => array(  (1)
                array(  (2)
                    'random_score' => new \stdClass() (3)
                )
            )
        )
    )
);
$results = $client->search($params);
Nach dem Login kopieren

1 Es codiert ein Array von Objekten: „functions“: []

2. Es kodiert die Objekte im Array: { "random_score": {} }

3. Es kodiert das leere JSON-Objekt: "random_score": {}

Empfohlen: [PHP-Tutorial]

Das obige ist der detaillierte Inhalt vonBehandeln Sie JSON-Arrays und -Objekte in PHP. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Verwandte Etiketten:
php
Quelle:learnku.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!