Próbuję przetestować json
typ w PostgreSQL 9.3.
Mam json
kolumnę o nazwie data
w tabeli o nazwie reports
. JSON wygląda mniej więcej tak:
{
"objects": [
{"src":"foo.png"},
{"src":"bar.png"}
],
"background":"background.png"
}
Chciałbym wyszukać w tabeli wszystkie raporty, które pasują do wartości „src” w tablicy „objects”. Na przykład, czy można wysyłać zapytania do bazy danych o wszystkie zgodne raporty 'src' = 'foo.png'
? Pomyślnie napisałem zapytanie, które może pasować do "background"
:
SELECT data AS data FROM reports where data->>'background' = 'background.png'
Ale ponieważ "objects"
ma tablicę wartości, nie mogę napisać czegoś, co działa. Czy można wysyłać zapytania do bazy danych o wszystkie pasujące raporty 'src' = 'foo.png'
? Przejrzałem te źródła, ale nadal nie mogę ich zdobyć:
- http://www.postgresql.org/docs/9.3/static/functions-json.html
- Jak wykonywać zapytania przy użyciu pól w nowym typie danych PostgreSQL JSON?
- http://michael.otacoo.com/postgresql-2/postgres-9-3-feature-highlight-json-operators/
Próbowałem też takich rzeczy, ale bezskutecznie:
SELECT json_array_elements(data->'objects') AS data from reports
WHERE data->>'src' = 'foo.png';
Nie jestem ekspertem od SQL, więc nie wiem, co robię źle.
jsonb
/ pg 9.4. Poza tym: dla prostego przypadku (1 poziom zagnieżdżenia),->
operator również robi sztuczkęjson
w str. 9.3.Utwórz tabelę z kolumną typu JSON
Teraz wstawmy dane json
Zróbmy teraz kilka zapytań, aby pobrać dane
Być może zauważyłeś, że wyniki zawierają odwrócony przecinek (") i nawiasy kwadratowe ([])
Teraz, aby pobrać tylko wartości, po prostu użyj
->>
źródło
wybierz dane -> 'obiekty' -> 0 -> 'src' jako SRC z tabeli gdzie dane -> 'obiekty' -> 0 -> 'src' = 'foo.png'
źródło