0

I have a JSON String in the given below form:

var jStr =
""" {
  |"company":{
  |"company name":"ABCD"
  |},
  |"person":[
  |{"name":"john",
  |"age":"28"
  |},
  |{
  |"name":"AWQ",
  |"age":"45"
  |}
  |]
  |}
  """.stripMargin

See the property "company name". Due to this I cannot extract it from its json form to its case class without changing the "company name" to "company_name"(or anything else). Below is the code:

import com.fasterxml.jackson.annotation.{JsonCreator, JsonProperty}
import org.json4s._
import org.json4s.native.JsonMethods._


val parseJson = parse(jStr) 
var obj = parseJson.extract[Info] // Exception Here


case class Company(cname : String)
case class Info(company: Company,person: List[Person]) 
case class Person(name : String , age : String)

I tried using @JsonProperty and @JsonCreator but they too failed.

@JsonCreator
case class Company( @JsonProperty("company name") cname : String)
case class Info(company: Company, person: List[Person]) 
case class Person(name : String , age : String)

I need to map a json property having spaces to its respective case class(which obviously can't have a space!) using Json4s in Scala.

Stacktrace:

Exception in thread "main" org.json4s.package$MappingException: No usable value for company
No usable value for cname
Did not find value which can be converted into java.lang.String
    at org.json4s.reflect.package$.fail(package.scala:95)
    at org.json4s.Extraction$ClassInstanceBuilder.org$json4s$Extraction$ClassInstanceBuilder$$buildCtorArg(Extraction.scala:548)
    at org.json4s.Extraction$ClassInstanceBuilder$$anonfun$3.applyOrElse(Extraction.scala:572)
    at org.json4s.Extraction$ClassInstanceBuilder$$anonfun$3.applyOrElse(Extraction.scala:570)
    at scala.PartialFunction.$anonfun$runWith$1$adapted(PartialFunction.scala:145)
    at scala.collection.mutable.ResizableArray.foreach(ResizableArray.scala:62)
    at scala.collection.mutable.ResizableArray.foreach$(ResizableArray.scala:55)
    at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:49)
    at scala.collection.TraversableLike.collect(TraversableLike.scala:407)
    at scala.collection.TraversableLike.collect$(TraversableLike.scala:405)
    at scala.collection.AbstractTraversable.collect(Traversable.scala:108)
    at org.json4s.Extraction$ClassInstanceBuilder.instantiate(Extraction.scala:570)
    at org.json4s.Extraction$ClassInstanceBuilder.result(Extraction.scala:630)
    at org.json4s.Extraction$.$anonfun$extract$10(Extraction.scala:416)
    at org.json4s.Extraction$.$anonfun$customOrElse$1(Extraction.scala:637)
    at scala.PartialFunction.applyOrElse(PartialFunction.scala:127)
    at scala.PartialFunction.applyOrElse$(PartialFunction.scala:126)
    at scala.PartialFunction$$anon$1.applyOrElse(PartialFunction.scala:257)
    at org.json4s.Extraction$.customOrElse(Extraction.scala:637)
    at org.json4s.Extraction$.extract(Extraction.scala:408)
    at org.json4s.Extraction$.extract(Extraction.scala:40)
    at org.json4s.ExtractableJsonAstNode.extract(ExtractableJsonAstNode.scala:21)
    at JsonTest.convertToJSON(JsonTest.scala:100)
    at Main$.main(Main.scala:8)
    at Main.main(Main.scala)
Caused by: org.json4s.package$MappingException: No usable value for cname
Did not find value which can be converted into java.lang.String
    at org.json4s.reflect.package$.fail(package.scala:95)
    at org.json4s.Extraction$ClassInstanceBuilder.org$json4s$Extraction$ClassInstanceBuilder$$buildCtorArg(Extraction.scala:548)
    at org.json4s.Extraction$ClassInstanceBuilder$$anonfun$3.applyOrElse(Extraction.scala:572)
    at org.json4s.Extraction$ClassInstanceBuilder$$anonfun$3.applyOrElse(Extraction.scala:570)
    at scala.PartialFunction.$anonfun$runWith$1$adapted(PartialFunction.scala:145)
    at scala.collection.mutable.ResizableArray.foreach(ResizableArray.scala:62)
    at scala.collection.mutable.ResizableArray.foreach$(ResizableArray.scala:55)
    at scala.collection.mutable.ArrayBuffer.foreach(ArrayBuffer.scala:49)
    at scala.collection.TraversableLike.collect(TraversableLike.scala:407)
    at scala.collection.TraversableLike.collect$(TraversableLike.scala:405)
    at scala.collection.AbstractTraversable.collect(Traversable.scala:108)
    at org.json4s.Extraction$ClassInstanceBuilder.instantiate(Extraction.scala:570)
    at org.json4s.Extraction$ClassInstanceBuilder.result(Extraction.scala:630)
    at org.json4s.Extraction$.$anonfun$extract$10(Extraction.scala:416)
    at org.json4s.Extraction$.$anonfun$customOrElse$1(Extraction.scala:637)
    at scala.PartialFunction.applyOrElse(PartialFunction.scala:127)
    at scala.PartialFunction.applyOrElse$(PartialFunction.scala:126)
    at scala.PartialFunction$$anon$1.applyOrElse(PartialFunction.scala:257)
    at org.json4s.Extraction$.customOrElse(Extraction.scala:637)
    at org.json4s.Extraction$.extract(Extraction.scala:408)
    at org.json4s.Extraction$ClassInstanceBuilder.org$json4s$Extraction$ClassInstanceBuilder$$buildCtorArg(Extraction.scala:534)
    ... 23 more
Caused by: org.json4s.package$MappingException: Did not find value which can be converted into java.lang.String
    at org.json4s.reflect.package$.fail(package.scala:95)
    at org.json4s.Extraction$.$anonfun$convert$2(Extraction.scala:735)
    at scala.Option.getOrElse(Option.scala:189)
    at org.json4s.Extraction$.convert(Extraction.scala:735)
    at org.json4s.Extraction$.$anonfun$extract$10(Extraction.scala:410)
    at org.json4s.Extraction$.$anonfun$customOrElse$1(Extraction.scala:637)
    at scala.PartialFunction.applyOrElse(PartialFunction.scala:127)
    at scala.PartialFunction.applyOrElse$(PartialFunction.scala:126)
    at scala.PartialFunction$$anon$1.applyOrElse(PartialFunction.scala:257)
    at org.json4s.Extraction$.customOrElse(Extraction.scala:637)
    at org.json4s.Extraction$.extract(Extraction.scala:408)
    at org.json4s.Extraction$ClassInstanceBuilder.org$json4s$Extraction$ClassInstanceBuilder$$buildCtorArg(Extraction.scala:534)
    ... 42 more

Process finished with exit code 1

0 Answers0