# Filter json array

**URL:** <https://www.pg-forum.de/t/filter-json-array/12010>\
**Category:** SQL\
**Created:** [14. Juli 2020 um 14:50 UTC](https://www.pg-forum.de/t/filter-json-array/12010 "2020-07-14T14:50:29Z")\
**Posts on this page:** 3\
**Page:** 1

<div class="post-metadata">

**Author:** ![richie1985](https://www.pg-forum.de/letter_avatar_proxy/v4/letter/r/258eb7/32.png) [@richie1985](https://www.pg-forum.de/u/richie1985)\
**Post date:** [14. Juli 2020 um 14:50 UTC](https://www.pg-forum.de/t/filter-json-array/12010/1 "2020-07-14T14:50:30Z")

</div>

Hi,

ich komme einfach nicht weiter… meine Spalte “JsonAnswers” beinhaltet:

> [  
> {“Infos zur RSV”:{“TextValue”:“Ja”,“ArrayStringDisplayValue”:[“Ja”]}},  
> {“Textfeld”:{“TextValue”:“Inbound”}},  
> {“Gespräch möglich”:{“TextValue”:“Gespräch möglich”}},  
> {“Absagegrund”:{“TextValue”:“28”,“ArrayStringDisplayValue”:["kein Interesse "]}},  
> {“Radio-buttons”:{“TextValue”:“Aufzeichnung gestartet?”,“ArrayStringDisplayValue”:[“Aufzeichnung gestartet?”]}},  
> {“kein Interesse”:{“TextValue”:“Kunde hat kein Interesse”}}  
> ]

Ich hätte gern NUR den Wert “28” vom Element “Absagegrund”…

Mit:

```
Select json_array_elements("JsonAnswers")->'Absagegrund'->'TextValue'
from (Select '[{"Infos zur RSV":{"TextValue":"Ja","ArrayStringDisplayValue":["Ja"]}},{"Textfeld":{"TextValue":"Inbound"}},{"Gespräch möglich":{"TextValue":"Gespräch möglich"}},{"Absagegrund":{"TextValue":"28","ArrayStringDisplayValue":["kein Interesse "]}},{"Radio-buttons":{"TextValue":"Aufzeichnung gestartet?","ArrayStringDisplayValue":["Aufzeichnung gestartet?"]}},{"kein Interesse":{"TextValue":"Kunde hat kein Interesse"}}]'::json as "JsonAnswers") x

```

bekomm ich zwar den Wert, aber dafür auch 5 leere Zeilen:

 ![grafik](https://www.pg-forum.de/uploads/default/original/1X/b5d3a7b08ebf1eb647a55773d4ac13f1b81f5132.png)

> **[DB Fiddle - SQL Database Playground](https://www.db-fiddle.com/f/mMFhNSsmkcvAqyPvjsxcq1/0)**
>
> An online SQL database playground for testing, debugging and sharing SQL snippets.

Danke Danke Danke!

---

<div class="post-metadata">

**Author:** ![castorp](https://www.pg-forum.de/letter_avatar_proxy/v4/letter/c/e99b99/32.png) [@castorp](https://www.pg-forum.de/u/castorp)\
**Post date:** [14. Juli 2020 um 15:03 UTC](https://www.pg-forum.de/t/filter-json-array/12010/2 "2020-07-14T15:03:44Z")

</div>

Wenn Du die Funktion in den FROM Teil verlagerst (und jsonb verwendest) kannst Du mit einem WHERE prüfen ob es den Absagegrund gibt:

```auto
select x.element -> 'Absagegrund' ->> 'TextValue' as text_value
from jsonb_array_elements('
    [{"Infos zur RSV":{"TextValue":"Ja","ArrayStringDisplayValue":["Ja"]}},
      {"Textfeld":{"TextValue":"Inbound"}},
      {"Gespräch möglich":{"TextValue":"Gespräch möglich"}},
      {"Absagegrund":{"TextValue":"28","ArrayStringDisplayValue":["kein Interesse "]}},
      {"Radio-buttons":{"TextValue":"Aufzeichnung gestartet?","ArrayStringDisplayValue":["Aufzeichnung gestartet?"]}},
      {"kein Interesse":{"TextValue":"Kunde hat kein Interesse"}}]'::jsonb) as x(element)
where x.element ? 'Absagegrund'      

```

---

<div class="post-metadata">

**Author:** ![system](https://www.pg-forum.de/uploads/default/original/1X/dc97a981dd26692d5fb52e8b8fc7c090d7b9559a.png) [@system](https://www.pg-forum.de/u/system)\
**Post date:** [21. Februar 2021 um 07:08 UTC](https://www.pg-forum.de/t/filter-json-array/12010/3 "2021-02-21T07:08:57Z")

</div>


