Scala circe decode Map[String, String] type
I have a Map[String, String] object with I want to use as json. I have written an encoder for this type:
implicit val encodeMap: Encoder[Map[String, String]] = new Encoder[Map[String, String]]
override def apply(values: Map[String, String]): Json =
values.toList
.map(pair => Json.obj(
(pair._1, pair._2.asJson)
)).asJson
In addition to encoder, I need a decoder, but I don't have an idea how to write it. My best try so far:
implicit val decodeMap: Decoder[Map[String, String]] = new Decoder[Map[String, String]]
final def apply(c: HCurser): Decoder.Result[Map[String, String]] = ???
Pretty basic, but I don't really know how to get into this problem.
Thanks!
scala circe
add a comment |
I have a Map[String, String] object with I want to use as json. I have written an encoder for this type:
implicit val encodeMap: Encoder[Map[String, String]] = new Encoder[Map[String, String]]
override def apply(values: Map[String, String]): Json =
values.toList
.map(pair => Json.obj(
(pair._1, pair._2.asJson)
)).asJson
In addition to encoder, I need a decoder, but I don't have an idea how to write it. My best try so far:
implicit val decodeMap: Decoder[Map[String, String]] = new Decoder[Map[String, String]]
final def apply(c: HCurser): Decoder.Result[Map[String, String]] = ???
Pretty basic, but I don't really know how to get into this problem.
Thanks!
scala circe
Doesimport io.circe.generic.auto._
not just work here (allowing you to use.asJson
) ?
– Andy Hayden
Oct 10 '18 at 19:28
add a comment |
I have a Map[String, String] object with I want to use as json. I have written an encoder for this type:
implicit val encodeMap: Encoder[Map[String, String]] = new Encoder[Map[String, String]]
override def apply(values: Map[String, String]): Json =
values.toList
.map(pair => Json.obj(
(pair._1, pair._2.asJson)
)).asJson
In addition to encoder, I need a decoder, but I don't have an idea how to write it. My best try so far:
implicit val decodeMap: Decoder[Map[String, String]] = new Decoder[Map[String, String]]
final def apply(c: HCurser): Decoder.Result[Map[String, String]] = ???
Pretty basic, but I don't really know how to get into this problem.
Thanks!
scala circe
I have a Map[String, String] object with I want to use as json. I have written an encoder for this type:
implicit val encodeMap: Encoder[Map[String, String]] = new Encoder[Map[String, String]]
override def apply(values: Map[String, String]): Json =
values.toList
.map(pair => Json.obj(
(pair._1, pair._2.asJson)
)).asJson
In addition to encoder, I need a decoder, but I don't have an idea how to write it. My best try so far:
implicit val decodeMap: Decoder[Map[String, String]] = new Decoder[Map[String, String]]
final def apply(c: HCurser): Decoder.Result[Map[String, String]] = ???
Pretty basic, but I don't really know how to get into this problem.
Thanks!
scala circe
scala circe
edited Oct 10 '18 at 20:00
asked Oct 10 '18 at 19:02
Doe
62
62
Doesimport io.circe.generic.auto._
not just work here (allowing you to use.asJson
) ?
– Andy Hayden
Oct 10 '18 at 19:28
add a comment |
Doesimport io.circe.generic.auto._
not just work here (allowing you to use.asJson
) ?
– Andy Hayden
Oct 10 '18 at 19:28
Does
import io.circe.generic.auto._
not just work here (allowing you to use .asJson
) ?– Andy Hayden
Oct 10 '18 at 19:28
Does
import io.circe.generic.auto._
not just work here (allowing you to use .asJson
) ?– Andy Hayden
Oct 10 '18 at 19:28
add a comment |
1 Answer
1
active
oldest
votes
Something like this should work but as Andy said above, you should be able to use automatic or semi-automatic derivation in this case.
import cats.syntax.either._
implicit val decodeMap: Decoder[Map[String, String]] = new Decoder[Map[String, String]]
override def apply(c: HCursor): Decoder.Result[Map[String, String]] =
c.keys.fold[Decoder.Result[Map[String, String]]](Right(Map.empty))(
_.foldLeft(Map[String, String]().asRight[DecodingFailure])((res, k) =>
res.flatMap((m: Map[String, String]) =>
c.downField(k).as[String].fold(
_.asLeft[Map[String, String]],
v => (m + (k -> v)).asRight[DecodingFailure]
)
)
)
)
add a comment |
Your Answer
StackExchange.ifUsing("editor", function ()
StackExchange.using("externalEditor", function ()
StackExchange.using("snippets", function ()
StackExchange.snippets.init();
);
);
, "code-snippets");
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "1"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: true,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: 10,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f52747117%2fscala-circe-decode-mapstring-string-type%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
1 Answer
1
active
oldest
votes
1 Answer
1
active
oldest
votes
active
oldest
votes
active
oldest
votes
Something like this should work but as Andy said above, you should be able to use automatic or semi-automatic derivation in this case.
import cats.syntax.either._
implicit val decodeMap: Decoder[Map[String, String]] = new Decoder[Map[String, String]]
override def apply(c: HCursor): Decoder.Result[Map[String, String]] =
c.keys.fold[Decoder.Result[Map[String, String]]](Right(Map.empty))(
_.foldLeft(Map[String, String]().asRight[DecodingFailure])((res, k) =>
res.flatMap((m: Map[String, String]) =>
c.downField(k).as[String].fold(
_.asLeft[Map[String, String]],
v => (m + (k -> v)).asRight[DecodingFailure]
)
)
)
)
add a comment |
Something like this should work but as Andy said above, you should be able to use automatic or semi-automatic derivation in this case.
import cats.syntax.either._
implicit val decodeMap: Decoder[Map[String, String]] = new Decoder[Map[String, String]]
override def apply(c: HCursor): Decoder.Result[Map[String, String]] =
c.keys.fold[Decoder.Result[Map[String, String]]](Right(Map.empty))(
_.foldLeft(Map[String, String]().asRight[DecodingFailure])((res, k) =>
res.flatMap((m: Map[String, String]) =>
c.downField(k).as[String].fold(
_.asLeft[Map[String, String]],
v => (m + (k -> v)).asRight[DecodingFailure]
)
)
)
)
add a comment |
Something like this should work but as Andy said above, you should be able to use automatic or semi-automatic derivation in this case.
import cats.syntax.either._
implicit val decodeMap: Decoder[Map[String, String]] = new Decoder[Map[String, String]]
override def apply(c: HCursor): Decoder.Result[Map[String, String]] =
c.keys.fold[Decoder.Result[Map[String, String]]](Right(Map.empty))(
_.foldLeft(Map[String, String]().asRight[DecodingFailure])((res, k) =>
res.flatMap((m: Map[String, String]) =>
c.downField(k).as[String].fold(
_.asLeft[Map[String, String]],
v => (m + (k -> v)).asRight[DecodingFailure]
)
)
)
)
Something like this should work but as Andy said above, you should be able to use automatic or semi-automatic derivation in this case.
import cats.syntax.either._
implicit val decodeMap: Decoder[Map[String, String]] = new Decoder[Map[String, String]]
override def apply(c: HCursor): Decoder.Result[Map[String, String]] =
c.keys.fold[Decoder.Result[Map[String, String]]](Right(Map.empty))(
_.foldLeft(Map[String, String]().asRight[DecodingFailure])((res, k) =>
res.flatMap((m: Map[String, String]) =>
c.downField(k).as[String].fold(
_.asLeft[Map[String, String]],
v => (m + (k -> v)).asRight[DecodingFailure]
)
)
)
)
edited Nov 12 '18 at 19:24
answered Nov 12 '18 at 19:16
Paul Medcraft
1,1461023
1,1461023
add a comment |
add a comment |
Thanks for contributing an answer to Stack Overflow!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Some of your past answers have not been well-received, and you're in danger of being blocked from answering.
Please pay close attention to the following guidance:
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2fstackoverflow.com%2fquestions%2f52747117%2fscala-circe-decode-mapstring-string-type%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Does
import io.circe.generic.auto._
not just work here (allowing you to use.asJson
) ?– Andy Hayden
Oct 10 '18 at 19:28