Tôi hiện đang trích xuất một số số liệu từ các nguồn dữ liệu khác nhau và lưu trữ chúng trong bản đồ loại Map[String,Any]
trong đó khóa tương ứng với tên chỉ số và giá trị tương ứng với giá trị chỉ số . Tôi cần điều này là ít nhiều chung chung, có nghĩa là các loại giá trị có thể là các kiểu nguyên thủy hoặc danh sách các kiểu nguyên thủy.Bản đồ [String, Any] đến chuỗi json nhỏ gọn sử dụng json4s
Tôi muốn tuần tự hóa bản đồ này thành chuỗi có định dạng JSON và tôi đang sử dụng thư viện json4s
. Vấn đề là nó dường như không thể và tôi không thấy một giải pháp có thể cho điều đó. Tôi mong chờ một cái gì đó như sau để làm việc ra khỏi hộp :)
val myMap: Map[String,Any] = ... // extract metrics
val json = myMap.reduceLeft(_ ~ _) // create JSON of metrics
Duyệt qua source code Tôi đã nhìn thấy json4s
cung cấp chuyển đổi ngầm để chuyển đổi các kiểu dữ liệu để JValue
's và cũng để chuyển đổi Traversable[A]/Map[String,A]/Option[A]
-JValue
's (dưới sự hạn chế của việc có sẵn một chuyển đổi tiềm ẩn từ A
đến JValue
, mà tôi hiểu nó thực sự có nghĩa là A
là một kiểu nguyên thủy). Nhà điều hành ~
cung cấp một cách hay để xây dựng JObject
's trong số JField
' s, mà chỉ là một bí danh loại cho (String, JValue)
.
Trong trường hợp này, giá trị bản đồ loại là Any
, vì vậy chuyển đổi ngầm không diễn ra và do đó trình biên dịch ném lỗi sau:
value ~ is not a member of (String, Any)
[error] val json = r.reduceLeft(_ ~ _)
Có một giải pháp cho những gì tôi muốn đạt được?
Nếu tôi hiểu chính xác bạn và bạn chỉ muốn tuần tự hóa 'myMap', tại sao không gọi' Serialization.write (myMap) 'trực tiếp? – edi
@ user3567830 Tôi muốn có một biểu diễn chuỗi JSON của 'myMap', đó là mục đích của việc sử dụng thư viện scala JSON chẳng hạn như' json4s' – jarandaf
Có, 'org.json4s.jackson.Serialization.write (myMap)' thực hiện chính xác điều đó. (Tôi đã sử dụng phiên bản jackson của json4s, nhưng điều này cũng làm việc cho phiên bản gốc). – edi