2015-06-25 14 views
16

Vì chuỗi rỗng là giá trị 0/mặc định cho Golang string, tôi quyết định xác định tất cả các trường như interface{} thay thế. ví dụ:Chỉ định các trường rỗng vào JSON thay vì các chuỗi rỗng trong Golang

type student struct { 
    FirstName interface{} `json:"first_name"` 
    MiddleName interface{} `json:"middle_name"` 
    LastName interface{} `json:"last_name"` 
} 

Ứng dụng tôi gửi dữ liệu của mình mong đợi một giá trị rỗng thay vì chuỗi trống nếu giá trị không có sẵn cho trường cụ thể đó.

Đây có phải là cách tiếp cận chính xác hoặc có thể ai đó vui lòng chỉ cho tôi điều gì đó tốt hơn điều này.

+1

sử dụng 'json: null' –

+3

Làm thế nào về một con trỏ: '* string'? Cũng liên quan: [Làm thế nào để tôi đại diện cho một chuỗi tùy chọn trong Go?] (Http://stackoverflow.com/questions/30731687/how-do-i-represent-an-optional-string-in-go) – icza

+0

@AryehArmon có thể bạn cung cấp liên kết đến các tài liệu mà thẻ đó được chỉ định? Tôi dường như không thể tìm thấy nó. – thwd

Trả lời

30

Trong json package documentation:

giá trị con trỏ mã hóa là giá trị chỉ ra. Một con trỏ nil mã hóa như là đối tượng JSON rỗng.

Vì vậy, bạn có thể lưu trữ một con trỏ đến một chuỗi đó sẽ được mã hóa như là một chuỗi nếu không bằng không và sẽ được mã hóa là "vô giá trị" nếu nil

type student struct { 
    FirstName *string `json:"first_name"` 
    MiddleName *string `json:"middle_name"` 
    LastName *string `json:"last_name"` 
} 
+1

Tôi đã thử phương pháp này. Liệu cách tiếp cận này và giao diện có lợi thế hơn nhau không? – Prashant

+2

Tôi sẽ nói tính dễ đọc và nhất quán. Rõ ràng rằng với con trỏ đến chuỗi tiếp cận bạn biết những gì var là về. Sử dụng một giao diện cho trình biên dịch biết rằng FirstName có thể là bất cứ thứ gì và để lại chỗ cho các lỗi – Asdine

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