Reputation: 3
The following code is working perfectly for the json has more than one elements but when it encountered single element, it is failing and throwing the following exception.
"Exception":"net.liftweb.json.MappingException: No usable value for rectype\nDid not find value which can be converted into java.lang.String"}
val list = for (source <- elements) yield
{
val m = source.extract[Source]
println (" value of m " + m)
write(Uiresult(m.key.toString(), (m.col.toString().trim()))).replace("\"$outer\":{},", "")
}
return (list.mkString("[\n", ",\n", "\n]"))
Element content when it is failing (List with one element)
List(JField(rectype,JString(LEAD)), JField(name,JString(MANGO KCOOPE2 KARUMBU KCOO)), JField(hashraw,JString(8674BE13EB68C5987A8F84101D8817D5)), JField(zip,JString()), JField(state,JString()), JField(listcode,JString(3395)), JField(masterid,JString(000XXX0000)), JField(vendorname,JString(ORANGE)), JField(matchtype,JString(OPA)), JField(completeRec,JString(0000XXX00002LEADORANGE3395OPAMANGO KCOOPE2 KARUMBU KCOOMANGO KCOOPE2 KARUMBU KCOOMANGO KCOOPE2 KARUMBU KCOOMANGO KCOOPE2 KARUMBU KCOOMANGO KCOOPE2 KARUMBU KCOOMANGO KCOOPE2 KARUMBU KCOO)), JField(businessId,JString()), JField(addrtype,JString()), JField(busname,JString(MANGO KCOOPE2 KARUMBU KCOO)), JField(recid,JString(000XXX0000)), JField(merge_all,JString(000XXX0000 MANGO KCOOPE2 KARUMBU KCOO MANGO KCOOPE2 KARUMBU KCOO )), JField(phone,JString()))
Element list with 2 or more is success. Below is for the list with 2 elements.
List(JField(_source,JObject(List(JField(rectype,JString(LEAD)), JField(name,JString(TREE TREE TREE)), JField(hashraw,JString(7A286CBED12A842EE44490FF9FB2EE4E)), JField(zip,JString(600028)), JField(state,JString(TN)), JField(listcode,JString(3395)), JField(masterid,JString(0XX0XXX99X)), JField(vendorname,JString(ORANGE)), JField(matchtype,JString(OPA)), JField(completeRec,JString(059785922872LEADORANGE3395OPATRI TREE DRURYTRI TREE DRURY UNIVERSITYTRI TREE DRURY UNIVERSITYTRI TREE DRURYTRI TREE DRURYTRI TREE DRURYTREE TREE TREETREE TREE TREETREE TREE TREETREE TREE TREETREE TREE TREETREE TREE TREE0YPA14951MADURAIMADURAI PARKWAYS,MADURAI PKWYPKWYSTE500MADURAITN60002814951MADURAIPKWYSTE500)), JField(businessId,JString()), JField(addrtype,JString(PA)), JField(busname,JString(TREE TREE TREE)), JField(recid,JString(5978592287)), JField(merge_all,JString(0XX0XXX99X TREE TREE TREE TREE TREE TREE 14951 MADURAI PARKWAYS STE 500 MADURAI TN 600028 )), JField(phone,JString())))), JField(_source,JObject(List(JField(rectype,JString(LEAD)), JField(name,JString(TREE TREE TREE)), JField(hashraw,JString(BA2E40AC7A212F6F77B7E5690661016B)), JField(zip,JString(600028)), JField(state,JString(TN)), JField(listcode,JString(3395)), JField(masterid,JString(0XX0XXX99X)), JField(vendorname,JString(ORANGE)), JField(matchtype,JString(OPA)), JField(completeRec,JString(059961378962LEADORANGE3395OPATRI TREE LOUISIANATRI TREE LOUISIANA STATE UNIVERSITYTRI TREE LOUISIANA STATE UNIVERSITYTRI TREE LOUISIANATRI TREE LOUISIANATRI TREE LOUISIANATREE TREE TREETREE TREE TREETREE TREE TREETREE TREE TREETREE TREE TREETREE TREE TREE0YPA14951MADURAIMADURAI PARKWAYS,MADURAI PKWYPKWYSTE500MADURAITN60002814951MADURAIPKWYSTE500)), JField(businessId,JString()), JField(addrtype,JString(PA)), JField(busname,JString(TREE TREE TREE)), JField(recid,JString(5996137896)), JField(merge_all,JString(0XX0XXX99X TREE TREE TREE TREE TREE TREE 14951 MADURAI PARKWAYS STE 500 MADURAI TN 600028 )), JField(phone,JString())))))
Work around done to handle this situation and it is working as expcted.
implicit val formats = DefaultFormats
try {
val json = JsonParser.parse(jsonString)
val elements = (json \\ "_source").children
if (elements.isEmpty == true) {
implicit val formats = DefaultFormats
return (List(write(ErrorMsg(searchType, "formatResult : No Matching Record Found", elements.toString())).replace("\"$outer\":{},", "")).mkString("[\n", ",\n", "\n]"))
}
if (size == 1 || (json.extract[ParseJson].hits.total.value == 1)) {
val m = (json \\ "_source").extract[Source]
val list = List(write(Uiresult(m.masterid.toString(), (m.merge_all.toString().trim()))).replace("\"$outer\":{},", ""))
return (list.mkString("[\n", ",\n", "\n]"))
} else {
val list = for (source <- elements) yield {
val m = source.extract[Source]
write(Uiresult(m.masterid.toString(), (m.merge_all.toString().trim()))).replace("\"$outer\":{},", "")
}
return (list.mkString("[\n", ",\n", "\n]"))
}
} catch {
case failure => return (List(write(ErrorMsg(searchType, "formatResult : Json Parsing Error", failure.toString())).replace("\"$outer\":{},", "")).mkString("[\n", ",\n", "\n]"))
}
Upvotes: 0
Views: 54