Scala generics usage for methods + json4s parsingjson4s serialization of string to avro specific record classCreate Generic method constraining T to an EnumHow do I use reflection to call a generic method?How to create a generic array in Java?NotSerializableException with json4s on SparkExtracting polymorphic types in json4sParsing and manipulating json in Scalaconvert scala object to json using json4sJSON to case class with generics decoding with json4sHow do I parse a generic class parameter from JSON in Scala?Extracting nested serialized json with json4s into case classes in Scala
Convert a string like 4h53m12s to a total number of seconds in JavaScript
Why is a dedicated QA team member necessary?
This message is flooding my syslog, how to find where it comes from?
Very basic singly linked list
How can I stop myself from micromanaging other PCs' actions?
Is the "cosmological constant tension" the prime reason that we believe the expansion of the universe is accelerating?
What does "see" in "the Holy See" mean?
Where is this photo of a group of hikers taken? Is it really in the Ural?
Is it normal practice to screen share with a client?
Iterate over non-const variables in C++
Explanation for a joke about a three-legged dog that walks into a bar
What does Kasparov mean by "I was behind in three and even in one after six games"?
What is the lowest speed of a bogey a jet fighter can intercept/escort?
Inadvertently nuked my disk permission structure - why?
How do I stop my characters falling in love?
How can I make sure my players' decisions have consequences?
Why is autologous blood transfusion banned as a kind of doping?
Why no ";" after "do" in sh loops?
How to judge a Ph.D. applicant that arrives "out of thin air"
Why are there not any MRI machines available in Interstellar?
A planet illuminated by a black hole?
Using "Kollege" as "university friend"?
Memory capability and powers of 2
Why did Saturn V not head straight to the moon?
Scala generics usage for methods + json4s parsing
json4s serialization of string to avro specific record classCreate Generic method constraining T to an EnumHow do I use reflection to call a generic method?How to create a generic array in Java?NotSerializableException with json4s on SparkExtracting polymorphic types in json4sParsing and manipulating json in Scalaconvert scala object to json using json4sJSON to case class with generics decoding with json4sHow do I parse a generic class parameter from JSON in Scala?Extracting nested serialized json with json4s into case classes in Scala
.everyoneloves__top-leaderboard:empty,.everyoneloves__mid-leaderboard:empty,.everyoneloves__bot-mid-leaderboard:empty margin-bottom:0;
I am not sure if this is achievable and I have a very basic understanding of how generics work in scala. But I was wondering if this is possible.
Say I have a method:
case class Person(id:String,name:String)
case class Student(id:String,name:String, class:String)
def convertToJson[A](fileName:String):
//read file
parse[A]
Is it possible to write this generic method which would parse the json based on the type of class I send when I call the convertToJson method?
Something like:
convertToJson[Student](fileName)
convertToJson[Person](fileName)
BTW the above code gives me a :
No Manifest available for A. error.
Using json4s for parsing.
Any help is appreciated.
scala generics json4s
add a comment |
I am not sure if this is achievable and I have a very basic understanding of how generics work in scala. But I was wondering if this is possible.
Say I have a method:
case class Person(id:String,name:String)
case class Student(id:String,name:String, class:String)
def convertToJson[A](fileName:String):
//read file
parse[A]
Is it possible to write this generic method which would parse the json based on the type of class I send when I call the convertToJson method?
Something like:
convertToJson[Student](fileName)
convertToJson[Person](fileName)
BTW the above code gives me a :
No Manifest available for A. error.
Using json4s for parsing.
Any help is appreciated.
scala generics json4s
add a comment |
I am not sure if this is achievable and I have a very basic understanding of how generics work in scala. But I was wondering if this is possible.
Say I have a method:
case class Person(id:String,name:String)
case class Student(id:String,name:String, class:String)
def convertToJson[A](fileName:String):
//read file
parse[A]
Is it possible to write this generic method which would parse the json based on the type of class I send when I call the convertToJson method?
Something like:
convertToJson[Student](fileName)
convertToJson[Person](fileName)
BTW the above code gives me a :
No Manifest available for A. error.
Using json4s for parsing.
Any help is appreciated.
scala generics json4s
I am not sure if this is achievable and I have a very basic understanding of how generics work in scala. But I was wondering if this is possible.
Say I have a method:
case class Person(id:String,name:String)
case class Student(id:String,name:String, class:String)
def convertToJson[A](fileName:String):
//read file
parse[A]
Is it possible to write this generic method which would parse the json based on the type of class I send when I call the convertToJson method?
Something like:
convertToJson[Student](fileName)
convertToJson[Person](fileName)
BTW the above code gives me a :
No Manifest available for A. error.
Using json4s for parsing.
Any help is appreciated.
scala generics json4s
scala generics json4s
asked Mar 26 at 16:33
AchilleusAchilleus
8695 silver badges20 bronze badges
8695 silver badges20 bronze badges
add a comment |
add a comment |
1 Answer
1
active
oldest
votes
This will convert a JSON string to a case class
import org.json4s._
import org.json4s.jackson.JsonMethods._
def convertToJson[T](json: String)(implicit fmt: Formats = DefaultFormats, mf: Manifest[T]): T =
Extraction.extract(parse(json))
Once this is defined you can parse appropriate strings to the required type:
case class Person(id: String, name: String)
case class Student(id: String, name: String, `class`: String)
val person = convertToJson[Person](""""name":"Jane","id":45""")
val student = convertToJson[Student](""""name":"John","id":63, "class": "101"""")
Note that this will ignore JSON data that does not match fields in the case class. If a field is optional in the JSON, make it an Option in the case class and you will get None if the field is not there.
That worked! Thanks. On a side note is there a way to deal with nulling out case when we have bad data? Say throw an exception or something?
– Achilleus
Mar 26 at 19:52
@Achilleus If you have bad data theextractwill throw an exception. You can let the caller handle that, or wrap theextractcall in aTryand return aTry[T], which is perhaps more standard in Scala.
– Tim
Mar 26 at 23:27
Actually, it won't throw an exception in the situation when we are dealing with nested json and an object in it say has a field spelled wrong. It will just null that object and move on. I was wondering if we can somehow specify it to fail or throw an exception instead of nulling it out.
– Achilleus
Mar 26 at 23:37
Can you give an example of this? If I rename one of the fields from the JSON string I getMappingException: No usable value for <fieldname>.
– Tim
Mar 26 at 23:50
Ah actually, it throws the exception for case classes. But I am using an Avro specific record case class. Its a case class that extends org.apache.avro.specific.SpecificRecordBase. But somehow it serializes to null in this case.
– Achilleus
Mar 27 at 16:05
|
show 1 more 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%2f55362062%2fscala-generics-usage-for-methods-json4s-parsing%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
This will convert a JSON string to a case class
import org.json4s._
import org.json4s.jackson.JsonMethods._
def convertToJson[T](json: String)(implicit fmt: Formats = DefaultFormats, mf: Manifest[T]): T =
Extraction.extract(parse(json))
Once this is defined you can parse appropriate strings to the required type:
case class Person(id: String, name: String)
case class Student(id: String, name: String, `class`: String)
val person = convertToJson[Person](""""name":"Jane","id":45""")
val student = convertToJson[Student](""""name":"John","id":63, "class": "101"""")
Note that this will ignore JSON data that does not match fields in the case class. If a field is optional in the JSON, make it an Option in the case class and you will get None if the field is not there.
That worked! Thanks. On a side note is there a way to deal with nulling out case when we have bad data? Say throw an exception or something?
– Achilleus
Mar 26 at 19:52
@Achilleus If you have bad data theextractwill throw an exception. You can let the caller handle that, or wrap theextractcall in aTryand return aTry[T], which is perhaps more standard in Scala.
– Tim
Mar 26 at 23:27
Actually, it won't throw an exception in the situation when we are dealing with nested json and an object in it say has a field spelled wrong. It will just null that object and move on. I was wondering if we can somehow specify it to fail or throw an exception instead of nulling it out.
– Achilleus
Mar 26 at 23:37
Can you give an example of this? If I rename one of the fields from the JSON string I getMappingException: No usable value for <fieldname>.
– Tim
Mar 26 at 23:50
Ah actually, it throws the exception for case classes. But I am using an Avro specific record case class. Its a case class that extends org.apache.avro.specific.SpecificRecordBase. But somehow it serializes to null in this case.
– Achilleus
Mar 27 at 16:05
|
show 1 more comment
This will convert a JSON string to a case class
import org.json4s._
import org.json4s.jackson.JsonMethods._
def convertToJson[T](json: String)(implicit fmt: Formats = DefaultFormats, mf: Manifest[T]): T =
Extraction.extract(parse(json))
Once this is defined you can parse appropriate strings to the required type:
case class Person(id: String, name: String)
case class Student(id: String, name: String, `class`: String)
val person = convertToJson[Person](""""name":"Jane","id":45""")
val student = convertToJson[Student](""""name":"John","id":63, "class": "101"""")
Note that this will ignore JSON data that does not match fields in the case class. If a field is optional in the JSON, make it an Option in the case class and you will get None if the field is not there.
That worked! Thanks. On a side note is there a way to deal with nulling out case when we have bad data? Say throw an exception or something?
– Achilleus
Mar 26 at 19:52
@Achilleus If you have bad data theextractwill throw an exception. You can let the caller handle that, or wrap theextractcall in aTryand return aTry[T], which is perhaps more standard in Scala.
– Tim
Mar 26 at 23:27
Actually, it won't throw an exception in the situation when we are dealing with nested json and an object in it say has a field spelled wrong. It will just null that object and move on. I was wondering if we can somehow specify it to fail or throw an exception instead of nulling it out.
– Achilleus
Mar 26 at 23:37
Can you give an example of this? If I rename one of the fields from the JSON string I getMappingException: No usable value for <fieldname>.
– Tim
Mar 26 at 23:50
Ah actually, it throws the exception for case classes. But I am using an Avro specific record case class. Its a case class that extends org.apache.avro.specific.SpecificRecordBase. But somehow it serializes to null in this case.
– Achilleus
Mar 27 at 16:05
|
show 1 more comment
This will convert a JSON string to a case class
import org.json4s._
import org.json4s.jackson.JsonMethods._
def convertToJson[T](json: String)(implicit fmt: Formats = DefaultFormats, mf: Manifest[T]): T =
Extraction.extract(parse(json))
Once this is defined you can parse appropriate strings to the required type:
case class Person(id: String, name: String)
case class Student(id: String, name: String, `class`: String)
val person = convertToJson[Person](""""name":"Jane","id":45""")
val student = convertToJson[Student](""""name":"John","id":63, "class": "101"""")
Note that this will ignore JSON data that does not match fields in the case class. If a field is optional in the JSON, make it an Option in the case class and you will get None if the field is not there.
This will convert a JSON string to a case class
import org.json4s._
import org.json4s.jackson.JsonMethods._
def convertToJson[T](json: String)(implicit fmt: Formats = DefaultFormats, mf: Manifest[T]): T =
Extraction.extract(parse(json))
Once this is defined you can parse appropriate strings to the required type:
case class Person(id: String, name: String)
case class Student(id: String, name: String, `class`: String)
val person = convertToJson[Person](""""name":"Jane","id":45""")
val student = convertToJson[Student](""""name":"John","id":63, "class": "101"""")
Note that this will ignore JSON data that does not match fields in the case class. If a field is optional in the JSON, make it an Option in the case class and you will get None if the field is not there.
answered Mar 26 at 18:53
TimTim
9,2051 gold badge8 silver badges20 bronze badges
9,2051 gold badge8 silver badges20 bronze badges
That worked! Thanks. On a side note is there a way to deal with nulling out case when we have bad data? Say throw an exception or something?
– Achilleus
Mar 26 at 19:52
@Achilleus If you have bad data theextractwill throw an exception. You can let the caller handle that, or wrap theextractcall in aTryand return aTry[T], which is perhaps more standard in Scala.
– Tim
Mar 26 at 23:27
Actually, it won't throw an exception in the situation when we are dealing with nested json and an object in it say has a field spelled wrong. It will just null that object and move on. I was wondering if we can somehow specify it to fail or throw an exception instead of nulling it out.
– Achilleus
Mar 26 at 23:37
Can you give an example of this? If I rename one of the fields from the JSON string I getMappingException: No usable value for <fieldname>.
– Tim
Mar 26 at 23:50
Ah actually, it throws the exception for case classes. But I am using an Avro specific record case class. Its a case class that extends org.apache.avro.specific.SpecificRecordBase. But somehow it serializes to null in this case.
– Achilleus
Mar 27 at 16:05
|
show 1 more comment
That worked! Thanks. On a side note is there a way to deal with nulling out case when we have bad data? Say throw an exception or something?
– Achilleus
Mar 26 at 19:52
@Achilleus If you have bad data theextractwill throw an exception. You can let the caller handle that, or wrap theextractcall in aTryand return aTry[T], which is perhaps more standard in Scala.
– Tim
Mar 26 at 23:27
Actually, it won't throw an exception in the situation when we are dealing with nested json and an object in it say has a field spelled wrong. It will just null that object and move on. I was wondering if we can somehow specify it to fail or throw an exception instead of nulling it out.
– Achilleus
Mar 26 at 23:37
Can you give an example of this? If I rename one of the fields from the JSON string I getMappingException: No usable value for <fieldname>.
– Tim
Mar 26 at 23:50
Ah actually, it throws the exception for case classes. But I am using an Avro specific record case class. Its a case class that extends org.apache.avro.specific.SpecificRecordBase. But somehow it serializes to null in this case.
– Achilleus
Mar 27 at 16:05
That worked! Thanks. On a side note is there a way to deal with nulling out case when we have bad data? Say throw an exception or something?
– Achilleus
Mar 26 at 19:52
That worked! Thanks. On a side note is there a way to deal with nulling out case when we have bad data? Say throw an exception or something?
– Achilleus
Mar 26 at 19:52
@Achilleus If you have bad data the
extract will throw an exception. You can let the caller handle that, or wrap the extract call in a Try and return a Try[T], which is perhaps more standard in Scala.– Tim
Mar 26 at 23:27
@Achilleus If you have bad data the
extract will throw an exception. You can let the caller handle that, or wrap the extract call in a Try and return a Try[T], which is perhaps more standard in Scala.– Tim
Mar 26 at 23:27
Actually, it won't throw an exception in the situation when we are dealing with nested json and an object in it say has a field spelled wrong. It will just null that object and move on. I was wondering if we can somehow specify it to fail or throw an exception instead of nulling it out.
– Achilleus
Mar 26 at 23:37
Actually, it won't throw an exception in the situation when we are dealing with nested json and an object in it say has a field spelled wrong. It will just null that object and move on. I was wondering if we can somehow specify it to fail or throw an exception instead of nulling it out.
– Achilleus
Mar 26 at 23:37
Can you give an example of this? If I rename one of the fields from the JSON string I get
MappingException: No usable value for <fieldname>.– Tim
Mar 26 at 23:50
Can you give an example of this? If I rename one of the fields from the JSON string I get
MappingException: No usable value for <fieldname>.– Tim
Mar 26 at 23:50
Ah actually, it throws the exception for case classes. But I am using an Avro specific record case class. Its a case class that extends org.apache.avro.specific.SpecificRecordBase. But somehow it serializes to null in this case.
– Achilleus
Mar 27 at 16:05
Ah actually, it throws the exception for case classes. But I am using an Avro specific record case class. Its a case class that extends org.apache.avro.specific.SpecificRecordBase. But somehow it serializes to null in this case.
– Achilleus
Mar 27 at 16:05
|
show 1 more comment
Got a question that you can’t ask on public Stack Overflow? Learn more about sharing private information with Stack Overflow for Teams.
Got a question that you can’t ask on public Stack Overflow? Learn more about sharing private information with Stack Overflow for Teams.
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.
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%2f55362062%2fscala-generics-usage-for-methods-json4s-parsing%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