2013-11-27 16 views
21

Ich kann to_json(1) verwenden, um Int in JSON zu konvertieren, aber wie kann ich JSON in Int konvertieren? Dies kann zu langsam sein:Wie zu konvertieren Postgres JSON zu Integer

to_json(1)::text::int 

Auch ist json von einem binären Block (BSON) gewickelt oder einem einfachen Wrapper von Text?

Antwort

5

to_json (1) :: text :: int vielleicht zu langsam

Aber dann ist es der einzige Weg.

Der zweite Teil Ihrer Frage ist unklar.

4

Die PostgreSQL 9.3 JSON-Unterstützung ist einfach validierter JSON-Text.

In 9.4 und neuer können Sie jsonb verwenden.

"möglicherweise zu langsam" macht nicht viel Sinn. Was lässt dich denken, dass es zu langsam ist? Hast du getestet und Benchmarks? Wenn es "zu langsam" ist, welche Geschwindigkeit würde nicht zu langsam sein, d. H. Was erwartest du?

+0

danken Du hoffst, dass die neue Version bald veröffentlicht wird. Da es eine Transformation zwischen String und Zahl gibt, wird es sicherlich langsamer als direkte Integer-Typ, wie jeder weiß. Da es im realen Fall akzeptiert werden kann, suchen wir einen schnelleren Weg. Ich stelle diese Frage unter json-to-int Frage, weil ich vermutet hätte, dass json von Text umhüllt ist, so dass json-to-int aus Text umwandeln muss, ansonsten sollte seine Struktur bereits getippt sein. – Inshua

+0

'jsonb' existiert jetzt. Unterstützt es das direkte Extrahieren von Ganzzahlen aus json? –

+0

@Craig Ringer - es hat Probleme, wenn der Wert null ist: select ('[null]' :: json-> 0) :: text :: int löst ungültige Eingabesyntax für Integer: "null" was Sinn macht .. das funktioniert: select ('[null]' :: json - >> 0) :: int ... gibt null zurück – Reinsbrain

6

Was funktioniert für mich (mit posgtgresql 5.6) wird

SELECT (tablename.jsoncolumnname->>'jsonfiledname')::int FROM tablename; 

wie

SELECT (users.data->>'failed_login_attempts_count')::int FROM users; 

users Tabelle Unter der Annahme hat eine json Spalte data benannt, die so etwas wie ist:

{"failed_login_attempts_count":"2","comment":"VIP"}