Scala Yield - Liftweb Json for 循环不适用于单个元素

以下代码完美适用于具有多个元素的 json,但是当遇到单个元素时,它失败并抛出以下异常。

"Exception":"net.liftweb.json.MappingException: 没有可用的 rectype 值\n没有找到可以转换为 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]"))

失败时的元素内容(一个元素列表)

List(JField(rectype,JString(LEAD)),JField(name,JString(MANGO KCOOPE2 KARUMBU KCOO)),JField(hashraw,JString(8674BE13EB68C5987A8F84101D8817D5)),JField(zip,JField()),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(芒果KCOOPE2 KARUMBU KCOO)),JField(recid,JField(merge_all,JString(000XXX0000 MANGO KCOOPE2 KARUMBU KCOO MANGO KCOOPE2 KARUMBU KCOO)),JField(phone,JString()))

包含 2 个或更多的元素列表是成功的。以下是包含 2 个元素的列表。

List(JField(_source,JObject(List(JField(rectype,JString(TREE TREE TREE)),JString(7A286CBED12A842EE44490FF9FB2EE4E)),JString) (600028)),JField(state,JString(TN)),JString(0XX0XXX99X)),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公园大道,MADURAI PKWYPKWYSTE500MADURAITN60002814951MADURAIPKWYSTE500)),JField(businessId,的jstring ()),JField(addrtype,JString(PA)),JField(busname,JString(5978592287)),JString(0XX0XXX99X TREE TREE TREE TREE TREE TREE 14951 MADURAI PARKWAYS STE 500 MADURAI TN 600028 )),JString()))),JField(_source,J Object(List(JField(rectype,JString(BA2E40AC7A212F6F77B7E5690661016B)),JString(600028),JField) JString(TN)),的jstring(059961378962LEADORANGE3395OPATRI TREE LOUISIANATRI TREE路易斯安娜州立UNIVERSITYTRI TREE路易斯安娜州立UNIVERSITYTRI TREE LOUISIANATRI TREE LOUISIANATRI TREE LOUISIANATREE TREE TREETREE TREE TREETREE TREE TREETREE TREE TREETREE TREE TREETREE TREE TREE0YPA14951MADURAIMADURAI公园大道,MADURAI PKWYPKWYSTE500MADURAITN60002814951MADURAIPKWYSTE500)),JField(businessId,的jstring()),JField(ADDRTYPE,JString(5996137896)),JString(0XX0XXX99X TREE TREE TREE TREE TREE TREE 14951 MADURAI PARKWAYS MADURAI05008AD600000000000000000000000000000000000000000001000000001000000000000000000000000000000896. )),JString()))))))

解决方法已完成处理这种情况,并且它按预期工作。

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]"))
      }

      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]"))
      } else {
        val list = for (source <- elements) yield {
          val m = source.extract[Source]
          write(Uiresult(m.masterid.toString(),"")
        }
        return (list.mkString("[\n","\n]"))
      }
    } catch {
      case failure => return (List(write(ErrorMsg(searchType,"formatResult : Json Parsing Error",failure.toString())).replace("\"$outer\":{},"\n]"))
    }
chuang700 回答:Scala Yield - Liftweb Json for 循环不适用于单个元素

暂时没有好的解决方案,如果你有好的解决方案,请发邮件至:iooj@foxmail.com
本文链接:https://www.f2er.com/1140265.html

大家都在问