如何使用多个值类型解组JSON对象

时间:2017-12-06 11:33:23

标签: json scala marshalling spray-json

说我有一个对象:

{
  "name": "joe",
  "age": 60
}

如何将其解组为Map[String, String]类型?

2 个答案:

答案 0 :(得分:3)

JsObject类的fields参数为Map[String, JsValue]。如果您需要Map[String, String],请使用mapValues

import spray.json._
import DefaultJsonProtocol._

val json =
  """{
       "name": "joe",
       "age": 60
     }"""

val jsObj = json.parseJson.asJsObject // JsObject
val myMap: Map[String, String] = jsObj.fields.mapValues(_.toString)

println(myMap)
// Map(name -> "joe", age -> 60)

答案 1 :(得分:-1)

  

将其解组为map [string]字符串只会拥有该对象的第一个值。您可以使用map [string] interface {} {}来解组该对象。   示例:

package main

import (
   "fmt"
   "encoding/json"
)

func main() {
    type user struct {
        Name string
        Age int
}
usr:=user{Name:"yog prakash",Age:24}
b,err:=json.Marshal(usr)
if err!=nil{
    fmt.Println("error in marshal ",err)
}
m:= map[string]interface{}{}
err=json.Unmarshal(b,&m)
if err!=nil{
    fmt.Println("error unmarshaling",err)
}
fmt.Println("age --> ",m["Age"])
fmt.Println("user map--> ",m)

}

  

输出

age -->  24
user map-->  map[Name:yog prakash Age:24]
  

查看实际操作:https://play.golang.org/p/eqSFqxnXup