2014-04-15 11 views
9

Tôi muốn chuyển đổi các hàng của một kỷ lục thiết lập để JSON, nhưng không bao gồm bất kỳ mục rỗng mà chỉ sẽ kết thúc bằng việc không xác định trong JavaScript anyway. Ví dụ, giả sử tôi có bảng testdata với mụcnull Trừ từ row_to_json() dẫn đến PostgreSQL

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

và sau đó thực hiện

SELECT row_to_json(testdata) FROM testdata 

Những gì tôi có được là:

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

Nhưng thay vào đó, những gì tôi muốn là:

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

Đây có phải là có thể? Theo JSON functions documentation cho PostgreSQL 9.3, chỉ có một tùy chọn thêm hoặc tham số cho row_to_json, nhưng thiết pretty_bool=true không loại bỏ các null, vì vậy nó có vẻ như nếu câu trả lời có thể là không. Nhưng điều này cũng có vẻ như đó là một chức năng rất rõ ràng và hữu ích, vì vậy tôi hy vọng rằng ai đó khác đã tìm thấy thứ tôi đã bỏ lỡ.

mục tiêu cuối cùng của tôi là để lấy các bản ghi trong JavaScript với một cuộc gọi GET đến một trang PHP. Tôi có nên xây dựng JSON trong PHP từ một bản ghi chuẩn hơn, thay vì sử dụng các thường trình JSON của PostgreSQL không?

+1

_but không bao gồm bất kỳ mục rỗng mà chỉ sẽ kết thúc bằng việc không xác định trong JavaScript anyway_ bất động sản sẽ được null không xác định. Nó sẽ không được xác định nếu bạn loại bỏ nó khỏi đối tượng như bạn muốn làm. –

+0

tôi có nghĩa là tôi cần họ được undefined, vì vậy họ sẽ kết thúc được định nghĩa trong ứng dụng JavaScript cụ thể của tôi - nó chỉ là một câu hỏi về nơi dọc theo chuỗi từ PostgreSQL qua PHP để JS mà tôi quản lý để làm cho điều đó xảy ra. Tất nhiên, điều đó không ảnh hưởng đến câu hỏi của tôi theo bất kỳ cách nào ... – Michael

+0

Bạn có chắc là có lợi ích trong việc có thuộc tính không được xác định thay vì null? Tôi không thấy điểm. Hỏi nó cho các chuyên gia JS. –

Trả lời

4

Hình như các phiên bản tương lai của hàm có thể có một 'phớt lờ null' tùy chọn - https://commitfest.postgresql.org/action/patch_view?id=1496

+1

Đáng buồn thay [bản vá này đã được kéo] (https://github.com/postgres/postgres/commit/c8a026e4f15e2063cd7fe6cb9ffe44f2a81398bd) từ mã - [xem thảo luận này] (http://postgresql.nabble.com/json-b-and -null-fields-td5820666.html). Hy vọng rằng một thay thế sẽ làm cho nó trong thời gian cho Postgres 9.5, mặc dù tôi không thể nhìn thấy bất cứ điều gì trong mã Postgres vào lúc này. –

+2

Postgresql 9.5 (hiện vẫn đang được phát triển) có chức năng [json_strip_nulls] (http://www.postgresql.org/docs/devel/static/functions-json.html). –

3

Postgres 9,5 giới thiệu json_strip_nulls chức năng, điều đó dường như làm chính xác những gì bạn muốn.

Các vấn đề liên quan