2015-07-24 31 views
7

Tôi có một số HashMap<String, String>, trong đó các chuỗi giá trị có thể dài hoặc gấp đôi. Ví dụ: 123.000 có thể được lưu trữ dưới dạng 123 (được lưu trữ miễn là dài) và 123.45123.45 (gấp đôi).Chuyển đổi Hashmap thành JSON bằng GSON

Hãy hai giá trị hashmap:

("một", "123"); ("Hai", "123,45")

Khi tôi chuyển đổi bản đồ ở trên vào một chuỗi JSON, các giá trị JSON không nên có dấu ngoặc kép, như

dự kiến: { "một": 123 , "hai": 123,45}

thực tế: { "một": "123", "hai": "123,45"}

Đây là mã của tôi dưới đây:

String jsonString = new Gson().toJson(map) 

Tôi thích giải pháp sử dụng GSON, nhưng việc sử dụng thư viện hoặc thư viện khác cũng được hoan nghênh.

+4

Thực ra, có [họ nên] (https://tools.ietf.org/html/rfc4627) – hd1

+3

Chuyển bản đồ hiện tại của bạn thành một 'Bản đồ ' hoặc 'Bản đồ ' và lưu trữ các giá trị thích hợp. –

+0

Tại sao bỏ phiếu nếu bạn không thích câu hỏi? Không có gì sai khi hỏi câu hỏi trên. – user3366706

Trả lời

4

Đối Gson bạn sẽ nhận được các chuyển đổi sau:

Map<String, Double> -> {"one": 123, "two":123.45} 
Map<String, Number> -> {"one": 123, "two":123.45} 
Map<String, String> -> {"one": "123", "two": "123.45"} 

Về cơ bản, không có cách nào để có được Gson để tự động chuyển đổi dây của bạn để giá trị số. Nếu bạn muốn chúng hiển thị dưới dạng số (nghĩa là không có dấu ngoặc kép), bạn cần lưu trữ kiểu dữ liệu thích hợp trong bản đồ, Double hoặc Number.

Ngoài ra, Json chỉ có một số giới hạn các loại nguyên thủy, nó lưu trữ chuỗi hoặc số. Giá trị số không phân biệt giữa Integer, Long, Double, v.v. vì vậy tôi không chắc chắn lý do tại sao bạn đang cố phân biệt chúng. Khi nó được lưu trữ như Json, tất cả đều được coi là kiểu số giống nhau.

+0

Có, nhưng tôi muốn thay đổi hành vi mặc định của nó như được đề cập trong câu hỏi – user3366706

+0

@ user3366706 Tại sao không chỉ sử dụng/chuyển đổi thành Bản đồ . Không có điểm cố gắng để phân biệt giữa Double và Integer bởi vì một khi nó trong Json tất cả các bạn có là một loại số duy nhất. – bcorso

+0

@bcorsp vui lòng đọc lại câu hỏi – user3366706

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