如何在 `JsObject.toString()` 中禁用 Scala Play json 的反斜杠转义?
How can I disable Scala Play json's backslash escape in `JsObject.toString()`?
我找不到在 Play json 中将单个反斜杠打印为单个反斜杠的方法。这有可能吗?
scala> val k = """abc\edf"""
val k: String = abc\edf
scala> JsString(k)
val res80: play.api.libs.json.JsString = "abc\edf"
scala> JsString(k).toString()
val res81: String = "abc\edf" // <--- additional "\" appears
scala> JsString(k).as[String]
val res82: String = abc\edf // <--- this is the string that I need
scala> Json.stringify(JsString(k))
val res86: String = "abc\edf"
scala> Json.asciiStringify(JsString(k))
val res90: String = "abc\edf"
scala> Json.prettyPrint(JsString(k))
val res92: String = "abc\edf"
通常这会很好,因为我可以使用 as[String]
。但是如果这个值在对象内,我就不能使用 as[String]
.
scala> JsObject(Seq("abc" -> JsObject(Seq("edf" -> JsString("""11122"""))))).toString()
val res99: String = {"abc":{"edf":"111\2222"}} // <-- I have no ideea how I can print single back slash here
我想将 JsObject 转换为不带反斜杠转义的字符串,有没有办法做到这一点?
"abc\edf"
无效 JSON,根据 JSON 规范:
https://www.json.org/json-en.html
\
后面只能跟"
、\
、/
、b
、f
、n
, r
, t
, 或 u
+4 个代表 Unicode 代码点的十六进制数字。
Play Framework 不允许您输出格式错误的 JSON.
更具体地说,单个 \
必须 在 JSON 到 \
中转义。但是,如果您 parse
将 JSON 返回到 Scala,它将返回 \
。
val in = """abc\edf"""
val out = Json.parse(Json.stringify(JsString(in))).as[String]
out
应该是这样 abc\edf
.
要从对象中提取特定的 属性,请使用 Play 的 JSON traversal mechanism。
scala> val obj = JsObject(Seq("abc" -> JsObject(Seq("edf" -> JsString("""11122""")))))
val obj: play.api.libs.json.JsObject = {"abc":{"edf":"111\2222"}}
scala> (obj \ "abc" \ "edf").as[String]
val res0: String = 11122
我找不到在 Play json 中将单个反斜杠打印为单个反斜杠的方法。这有可能吗?
scala> val k = """abc\edf"""
val k: String = abc\edf
scala> JsString(k)
val res80: play.api.libs.json.JsString = "abc\edf"
scala> JsString(k).toString()
val res81: String = "abc\edf" // <--- additional "\" appears
scala> JsString(k).as[String]
val res82: String = abc\edf // <--- this is the string that I need
scala> Json.stringify(JsString(k))
val res86: String = "abc\edf"
scala> Json.asciiStringify(JsString(k))
val res90: String = "abc\edf"
scala> Json.prettyPrint(JsString(k))
val res92: String = "abc\edf"
通常这会很好,因为我可以使用 as[String]
。但是如果这个值在对象内,我就不能使用 as[String]
.
scala> JsObject(Seq("abc" -> JsObject(Seq("edf" -> JsString("""11122"""))))).toString()
val res99: String = {"abc":{"edf":"111\2222"}} // <-- I have no ideea how I can print single back slash here
我想将 JsObject 转换为不带反斜杠转义的字符串,有没有办法做到这一点?
"abc\edf"
无效 JSON,根据 JSON 规范:
https://www.json.org/json-en.html
\
后面只能跟"
、\
、/
、b
、f
、n
, r
, t
, 或 u
+4 个代表 Unicode 代码点的十六进制数字。
Play Framework 不允许您输出格式错误的 JSON.
更具体地说,单个 \
必须 在 JSON 到 \
中转义。但是,如果您 parse
将 JSON 返回到 Scala,它将返回 \
。
val in = """abc\edf"""
val out = Json.parse(Json.stringify(JsString(in))).as[String]
out
应该是这样 abc\edf
.
要从对象中提取特定的 属性,请使用 Play 的 JSON traversal mechanism。
scala> val obj = JsObject(Seq("abc" -> JsObject(Seq("edf" -> JsString("""11122""")))))
val obj: play.api.libs.json.JsObject = {"abc":{"edf":"111\2222"}}
scala> (obj \ "abc" \ "edf").as[String]
val res0: String = 11122