scala键中的空白不保留
case class c1(
state :String,
`Card No`:String
)
请求有效载荷
{
"state": "HH",
"Card No": "c1234",
"xxxx": "xxxx"
}
从gson转换为Json后在代码中使用case类时 它变成
{"state":"HH","Card$u0020No":"c1234","xxx":"xxx"}
答案 0 :(得分:3)
我还没有尝试gson
进行JSON处理。我使用Play JSON play.api.libs.json
框架。
以下内容可用于播放JSON:
import play.api.libs.json._
case class MyClass(State: String, `Card No`: String)
// Play can convert any case class into a JsValue, using macros.
// you will need an implicit `Writes` for `MyClass`
implicit private val MyClassWrites = Json.writes[MyClass]
val myobj = MyClass(State = "Bangalore", `Card No` = "Bl@#1234")
val json = Json.toJson(myobj)
println(json)
给出以下JSON:
{"State":"Bangalore","Card No":"Bl@#1234"}
一旦我签出gson lib,将更新此内容。
更新:使用Gson
我希望您没有用反引号定义案例类的值,而是使用标准格式-可能是驼峰式的案例。这将有助于保持代码更清洁。 如下所示:
case class MyClassA (state: String, cardNo: String)
,并在构建JSON时使用gson FieldNamingPolicy
获得正确的格式。
您可以创建一个gson生成器并执行类似的操作
val status = MyClassA(State = "Bangalore", cardNo = "Bl@#1234")
val gson = new GsonBuilder()
.setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE_WITH_SPACES)
.setPrettyPrinting().create()
println(gson.toJson(status))
FieldNamingPolicy.UPPER_CAMEL_CASE_WITH_SPACES
将确保字段名称的第一个字母在序列化为JSON格式时首字母大写,并且单词之间将用空格分隔。
上面将产生以下JSON。
{
"State": "Bangalore",
"Card No": "Bl@#1234"
}
此外,您可以在任何字段名称上使用@SerializedName
批注来指定序列化名称。
使用注释
使用SerializedName
如下:
case class MyClassA (
State: String,
@(SerializedName @scala.annotation.meta.field)("card no")
cardNo: String
)
您需要使用scala.annotation.meta
中的元注释。请参阅此git issue