gpt4 book ai didi

json - 我如何将带有混合类型值的 json 转换为带有 Scala 和 json Spray 的 json

转载 作者:行者123 更新时间:2023-12-01 02:21:33 25 4
gpt4 key购买 nike

我尝试了 json Spray 的教程,但我有一个不同的字符串,其中一个值是字符串,另一个是列表。
如何将以下字符串转换为 json 对象,其中每个键都是列表或字符串?

source = """{ "some": "JSON source", "kuku":["fu"] }"""

我写了一小段代码,但不能从这里继续:
val source = """{ "some": "JSON source", "kuku":["fu"] }"""
val jsonAst = source.asJson
val kuku = jsonAst.convertTo[?]
println(kuku)

如果我不能,我如何获得一些键的值(希望没有正则表达式)
我宁愿避免为其创建特定对象,因为某些键可以更改。

谢谢,
大卫

最佳答案

您可以将整个对象转换为 map 到 Either :

val jsonMap = jsonAst.convertTo[Map[String, Either[String, List[String]]]]

进而:
scala> println(jsonMap)
Map(some -> Left(JSON source), kuku -> Right(List(fu)))
Either part 显式地模拟了一个事实,即您在编译时不知道查找键时将获得哪种值。有很多 introductionsEither 的想法在 Scala 中,但简而言之,您可以像这样使用它:
val some: String = jsonMap("some").left.getOrElse(
??? /* Provide a default value, throw an exception, etc. */
)

val kuku: List[String] = jsonMap("kuku").right.getOrElse(
??? /* Provide a default value, throw an exception, etc. */
)

或者,更好的是,处理 key 可能不同时存在的事实:
val some: String = jsonMap.get("some").flatMap(_.left.toOption).getOrElse(
??? /* Provide a default value, throw an exception, etc. */
)

或者,您可以导航到 "kuku"字段,然后转换:
val kuku = jsonAst.asJsObject.getFields("kuku").headOption.map(
_.convertTo[List[String]]
)

进而:
scala> kuku
res0: Option[List[String]] = Some(List(fu))

我个人觉得第一种方法更简洁一些。

关于json - 我如何将带有混合类型值的 json 转换为带有 Scala 和 json Spray 的 json,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20092828/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com