标签: argonaut

如何从 Argonaut Json 对象中删除具有空值的键

如何编写扩展方法以null从 ArgonautJson对象中删除所有具有值的键:

我试过这个:

package object Extensions {
  implicit class JsonExtensions(val json: Json) extends AnyVal {
    def removeNulls: Json = {
      json.withObject(j => JsonObject.from (j.toMap.filter(!_._2.isNull).toList))
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

但它似乎只是nullJson对象的顶层删除具有值的键......

scala argonaut

3
推荐指数
1
解决办法
536
查看次数

使用Argonaut进行Scalaz验证

我有一个案例类和伴侣对象:

case class Person private(name: String, age: Int)

object Person {

  def validAge(age: Int) = {
    if (age > 18) age.successNel else "Age is under 18".failureNel
  }

  def validName(name: String) = {
    name.successNel
  }

  def create(name: String, age: Int) = (validAge(age) |@| validName(name))(Person.apply)

}
Run Code Online (Sandbox Code Playgroud)

我想使用Argonaut解析一些JSON并返回一个Person或一些错误,作为一个列表.所以我需要:

  1. 从字符串中读取JSON,并验证字符串是否正确形成
  2. 将JSON解码为Person或错误字符串列表.

我希望以某种形式返回错误,我可以将其变成更多JSON,如:

{
  errors: ["Error1", "Error2"]
}
Run Code Online (Sandbox Code Playgroud)

我首先尝试使用Argonauts decodeValidation方法,该方法返回Validation [String,X].不幸的是,我需要一个错误列表.

有什么建议?

json scala scalaz argonaut

2
推荐指数
1
解决办法
585
查看次数

Purescript重用Argonaut JSON解码为Affjax响应

我正在尝试从Haskell服务器获取一些JSON数据,但我遇到了Respondeable实例,以及一般的Affjax.我已经使用Data.Argonaut.Generic.Aeson(GA)定义了EncodeJson + DecodeJson,但我无法弄清楚如何将其与Respondeable实例相匹配并且它来自响应函数.

它给了我错误"无法匹配类型外部与类型Json"但是可以重用我的decodeJson实例而不必手动创建任何其他东西吗?也许通过创建一个IsForeign实例,但使用GA.decodeJson?我只是不确定如何去做.我已经看到它是如何在https://github.com/purescript/purescript-foreign/blob/master/examples/Complex.purs手动完成的,但我有复杂的类型需要与我的Haskell JSON输出相匹配,手动完成这将是一个巨大的痛苦.

我正在使用purescript 10.7,Affjax 3.02和argonaut 2.0.0,以及argonaut-generic-codecs 5.1.0.谢谢!

testAffjax :: forall eff. Aff (ajax :: AJAX | eff) (Answer)
testAffjax = launchAff do
  res <- affjax $ defaultRequest { url = "/", method = Left GET }
  pure res.response


data Answer = Answer {
  _answer :: String
, _isCorrect :: Boolean
, _hint :: String
}

{- PROBLEM -}
instance respondableAnswer :: Respondable Answer where
  responseType = Tuple Nothing JSONResponse
  fromResponse = GA.decodeJson {- Error here …
Run Code Online (Sandbox Code Playgroud)

argonaut purescript

2
推荐指数
1
解决办法
640
查看次数

当字段不完整时,用 Circe 解码 Json

我有一份 json 格式的成绩单,里面有一堆单词

{
     "words": [{
          "duration": 123,
          "name": "world"
          "time": 234,
          "speaker": null
      }]
}
Run Code Online (Sandbox Code Playgroud)

我一直在使用 Circe 来编码/解码 Json。在这种特殊情况下:

import io.circe.generic.auto._
import io.circe.parser._

val decoded = decode[Transcript](transcriptJson)
Run Code Online (Sandbox Code Playgroud)

我的 ADT 看起来像:

case class Word(
  duration: Double,
  name: String,
  time: Float,
  para: String,
  speaker: Option[String],
  key: Option[String] = None,
  strike: Option[String] = None,
  highlight: Option[String] = None
)

case class Transcript(words: List[Word])
Run Code Online (Sandbox Code Playgroud)

有时单词有像“strike”或“highlight”这样的键,但很可能没有。如果没有,我会收到以下错误消息。

Left(DecodingFailure([A]List[A], List(DownField(highlight), MoveRight, MoveRight, MoveRight, MoveRight, MoveRight, MoveRight, MoveRight, MoveRight, MoveRight, MoveRight, MoveRight, MoveRight, MoveRight, MoveRight, MoveRight, MoveRight, …
Run Code Online (Sandbox Code Playgroud)

scala argonaut circe

2
推荐指数
1
解决办法
1747
查看次数

标签 统计

argonaut ×4

scala ×3

circe ×1

json ×1

purescript ×1

scalaz ×1