如何使用 scala 和 json spray 将混合类型值的 json 转换为 json

     2023-02-16     241

关键词:

【中文标题】如何使用 scala 和 json spray 将混合类型值的 json 转换为 json【英文标题】:how do i convert json with mixed type values to json with scala and json spray 【发布时间】:2013-12-04 06:17:11 【问题描述】:

我尝试了 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)

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

谢谢, 大卫

【问题讨论】:

【参考方案1】:

您可以将整个对象转换为映射到Either

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

然后:

scala> println(jsonMap)
Map(some -> Left(JSON source), kuku -> Right(List(fu)))

Either 部分明确地模拟了这样一个事实,即您在编译时不知道查找键时会得到哪种值。 introductions 在 Scala 中有很多 Either 的想法,但总之你可以像这样使用它:

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. */
)

或者,更好的是,处理密钥可能不同时存在的事实:

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 源”? println(jsonMap.get("kuku").get) 给了我 Left("JSON source") 我刚刚添加了一些关于Either的cmets。

如何在scala akka(spray)中为rest服务编写测试用例

】如何在scalaakka(spray)中为rest服务编写测试用例【英文标题】:howtowritetestcaseforrestserviceinscalaakka(spray)【发布时间】:2016-04-2416:38:22【问题描述】:如何模拟HttpRespose?我正在使用scalla、akka和spray来调用以json响应的rest服务,我... 查看详情

Scala、Akka、Spray:如何在处理前验证 json 数据?

】Scala、Akka、Spray:如何在处理前验证json数据?【英文标题】:Scala,Akka,Spray:Howtovalidatejsondatabeforeprocessing?【发布时间】:2015-03-3117:29:31【问题描述】:当所有输入都有效时,我可以处理这个json,即使用有效的键(包括大小写)... 查看详情

Scala,spray-json:通用枚举 json 格式

】Scala,spray-json:通用枚举json格式【英文标题】:Scala,spray-json:universalenumerationjsonformatting【发布时间】:2018-03-1815:22:36【问题描述】:我有这样的模型:两个枚举和一个案例类,其中包含这些枚举类型的两个字段://seelater,whyobj... 查看详情

如何让 Shiro 在 Scala + Akka + Spray 环境中工作

】如何让Shiro在Scala+Akka+Spray环境中工作【英文标题】:HowcanimakeShiroworkinScala+Akka+Sprayenvironment【发布时间】:2013-07-2209:25:57【问题描述】:我想我没有正确理解工作流程。我正在使用ApacheShiro和Stormpath在Scala中编写Web服务。我的用... 查看详情

spray-json

spray-json是一个轻量级的,简介的和高效的使用Scala实现的json它拥有以下特征:一个简单不可变的模型的json语言元素一个高效的json解析器可选择既紧凑又漂亮的json到string的打印(格式化输出)基于类的自定义对象的(反)序列化(没... 查看详情

Scala 类型类模式和泛型方法

...:38【问题描述】:我正在尝试编写一个通用提取器,用于使用spray和spray-json解析jsonPOST正文。但是,我很难让它与多个模型一起使用。这是服务对象中的case语句:importMyJsonProtocol._...defreceive=casePost(R 查看详情

使用 Spray-json 解析简单数组

...55:16【问题描述】:我正在尝试(但失败了)了解spray-json如何将json提要转换为对象。如果我有一个简单的键->值json提要,那么它似乎工作正常,但我想读取的数据出现在这样的列表中:["name":"John","age":"30","name":"Tom"," 查看详情

Scala 在解析隐式时如何使用显式类型?

】Scala在解析隐式时如何使用显式类型?【英文标题】:HowdoesScalauseexplicittypeswhenresolvingimplicits?【发布时间】:2015-12-0300:20:33【问题描述】:我有以下代码,它使用spray-json通过parseJson方法将一些JSON反序列化为案例类。取决于隐... 查看详情

Spray-Json:如何解析 Json 数组?

】Spray-Json:如何解析Json数组?【英文标题】:Spray-Json:HowtoparseaJsonArray?【发布时间】:2013-12-2916:21:04【问题描述】:我是Spray-JsonAPI的新手,我正在尝试解析来自DockerRESTAPI的Json响应。There是使用Spray-Json解析此GoogleMapJson响应的一... 查看详情

Spray-json 和列表编组

...alling【发布时间】:2013-07-1801:15:39【问题描述】:我正在使用spray-json将自定义对象列表编组为JSON。我有以下案例类及其JsonProtocol。caseclassElementResponse(name:String,symbol:String,code:String,pkwiu:String,remarks: 查看详情

使用自定义 JsonFormats 在喷雾路由中进行喷雾 json 序列化

...n一起用于系统,版本:"io.spray"%%"spray-json"%"1.2.6"我不知道如何让自定义JsonFormat定义为喷雾路由处理 查看详情

如何使用 spark/scala 将 json 字符串格式化为 MongoDB 文档样式?

】如何使用spark/scala将json字符串格式化为MongoDB文档样式?【英文标题】:HowtoformatjsonstringasMongoDBdocumentstyleusingspark/scala?【发布时间】:2021-07-1002:35:42【问题描述】:我有一个包含两列id、json_string的表,需要将json_string转换为Mongo... 查看详情

将 Play 框架与 Scala 结合使用,如何将 Json Validation 消息人性化?

】将Play框架与Scala结合使用,如何将JsonValidation消息人性化?【英文标题】:UsingPlayframeworkwithScala,howcanIhumanizeaJsonValidationmessage?【发布时间】:2015-05-1119:07:20【问题描述】:目前有以下隐式Readsval:implicitvalabridgedProductReads:Reads[Pro... 查看详情

将多态案例类转换为 json 并返回

...布时间】:2013-05-0621:52:23【问题描述】:我试图在scala中使用spray-json来识别在转换为Json并返回时Ec2Provider和OpenstackProvider之间的选择。我希望能够在“提供者”中提供选择,如果这些选择不适合可用的选择,那么它不应该验证。... 查看详情

如何使用 Apache Spark 和 Scala 创建嵌套 json

】如何使用ApacheSpark和Scala创建嵌套json【英文标题】:HowtocreatenestedjsonusingApacheSparkwithScala【发布时间】:2019-09-2510:33:32【问题描述】:我正在尝试从我的spark数据框创建一个嵌套JSON,该数据框具有以下结构的数据。Vendor_Name,count,... 查看详情

Spray 不会将我的案例类转换为 json 并期待一个 spray.httpx.marshalling.ToResponseMarshallable

】Spray不会将我的案例类转换为json并期待一个spray.httpx.marshalling.ToResponseMarshallable【英文标题】:Spraywon\'tconvertmycaseclasstojsonandexpectaspray.httpx.marshalling.ToResponseMarshallable【发布时间】:2014-09-0211:50:28【问题描述】:我正在尝试重新... 查看详情

Play 框架和 JSON Web 令牌

...。【问题讨论】:【参考方案1】:我在spray.io应用程序中使用Nimbus-JOSE-JWT 查看详情

如何使用 JSON 映射文件在 Spark 中使用 Scala 生成新的 DataFrame

】如何使用JSON映射文件在Spark中使用Scala生成新的DataFrame【英文标题】:HowtouseaJSONmappingfiletogenerateanewDataFrameinSparkusingScala【发布时间】:2018-07-2408:52:11【问题描述】:我有两个DataFrames、DF1和DF2,以及一个JSON文件,我需要将其用... 查看详情