2014-04-15 7 views
9

Ich möchte die Zeilen eines Datensatzes in JSON konvertieren, aber keine Null-Einträge enthalten, die am Ende sowieso in JavaScript undefiniert sind. Zum Beispiel nehme ich an den Tisch testdata mit EinträgenAusschließen von Nullen von row_to_json() Ergebnis in PostgreSQL

id | prop1 (integer) | prop2 (text) 
------------------------------------- 
1 |    42 | 'Answer' 
2 |    NULL | 'No prop one' 
3 |    0 | NULL 

und führen

SELECT row_to_json(testdata) FROM testdata 

Was ich ist haben:

{"id":"1","prop1":"42","prop2":"Answer"} 
{"id":"2","prop1":null,"prop2":"No prop one"} 
{"id":"3","prop1":"0","prop2":null} 

Aber stattdessen was ich wollen ist:

{"id":"1","prop1":"42","prop2":"Answer"} 
{"id":"2","prop2":"No prop one"} 
{"id":"3","prop1":"0"} 

Ist das möglich? Nach der JSON functions documentation für PostgreSQL 9.3 gibt es nur eine zusätzliche Option oder Parameter für row_to_json, aber die Einstellung pretty_bool=true entfernt nicht die Nullen, so scheint es, als ob die Antwort nein sein könnte. Aber das scheint auch eine sehr offensichtliche und nützliche Funktion zu sein, also hoffe ich, dass jemand anderes etwas gefunden hat, das ich vermisst habe.

Mein Ziel ist es, die Datensätze in JavaScript mit einem GET Aufruf auf eine PHP-Seite abrufen. Ist es besser, JSON in PHP aus einem Standard-Recordset zu erstellen, anstatt die JSON-Routinen von PostgreSQL zu verwenden?

+1

_aber keine Null-Einträge enthalten, die am Ende in JavaScript sowieso undefiniert werden _ Die Eigenschaft wird null undefined sein. Es wird undefiniert sein, wenn Sie es aus dem Objekt entfernen, wie Sie möchten. –

+0

Ich meinte, ich brauche sie undefiniert zu sein, so dass sie in meiner speziellen JavaScript-Anwendung nicht definiert werden - es ist nur eine Frage, wo entlang der Kette von PostgreSQL über PHP zu JS, dass ich es schaffen kann. Natürlich beeinflusst das meine Frage in keiner Weise ... – Michael

+0

Sind Sie sicher, dass es einen Vorteil hat, wenn die Eigenschaft undefiniert statt null ist? Ich verstehe den Punkt nicht. Fragen Sie es den JS-Experten. –

Antwort

4

Sieht aus wie zukünftige Versionen der Funktion kann eine ‚ignore nulls‘ Option - https://commitfest.postgresql.org/action/patch_view?id=1496

+1

Leider [dieser Patch wurde gezogen] (https://github.com/postgres/postgres/commit/c8a026e4f15e2063cd7fe6cb9ffe44f2a81398bd) aus dem Code - [siehe diese Diskussion] (http://postgresql.nabble.com/json-b-and -null-fields-td5820666.html). Hoffentlich wird es rechtzeitig für Postgres 9.5 eine Alternative geben, obwohl ich im Postgres-Code momentan nichts sehe. –

+2

Postgresql 9.5 (derzeit noch in Entwicklung) hat die Funktion [json_strip_nulls] (http://www.postgresql.org/docs/devel/static/functions-json.html). –

Verwandte Themen