2013-11-27 128 views
21

我可以使用to_json(1)來將int轉換爲json,但是如何將json轉換爲int?這可能是太慢:如何將postgres json轉換爲整數

to_json(1)::text::int 

另外,是JSON從二進制塊(BSON)或文本的一個簡單的包裝包裹?

回答

5

to_json(1)::文字:: INT也許太慢

但後來,它是唯一的方法。

問題的第二部分不清楚。

4

PostgreSQL 9.3 JSON支持只是驗證json文本。

在9.4和更新版本中,您可以使用jsonb。

「可能太慢」並沒有多少意義。是什麼讓你覺得這太慢了?你測試和基準?如果它「太慢」,那麼不是的速度太慢,即你期望的是什麼?

+0

謝謝你希望儘快發佈新版本。衆所周知,由於字符串和數字之間存在轉換,所以它肯定會比直接整數類型慢。在實際使用中它可以被接受,我們正在尋求更快的方式。 我把這個問題放在json-to-int的問題之下,因爲我懷疑json是從文本中包裝的,這讓json-to-int必須從文本中轉換,否則它的存儲結構應該已經被輸入了。 – Inshua

+0

'jsonb'現在存在。它支持從json直接提取整數嗎? –

+0

@Craig林格 - 它有問題,如果值爲空: select('[null]':: json-> 0):: text :: int引發無效輸入語法的整數:「空」,這是有道理的.. 。 這個作品:select('[null]':: json - >> 0):: int ...返回null – Reinsbrain

6

我什麼工作(使用posgtgresql 5.6)是

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

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

有一個名爲data一個JSON列是這樣的:

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