繁体   English   中英

Scala 中的条件 json 解析

[英]Conditional json parsing in Scala

import com.fasterxml.jackson.annotation.JsonInclude
import com.fasterxml.jackson.databind.ObjectMapper
import com.fasterxml.jackson.module.scala.DefaultScalaModule
import com.fasterxml.jackson.module.scala.experimental.ScalaObjectMapper

case class CampaignSparkParameters( category : String )
                                    object CampaignSparkParameters  {
                                    case class Inner(  
                                    booster: String,
                                    tree_method: String,
                                     verbosity:Int,
                                     nthread:String,
                                     num_workers:Int,
                                     early_stopping_rounds:Int,
                                     colsample_bytree:Float,
                                     subsample:Float,
                                     objective:String,
                                     eval_metric:String,
                                     lambda : Float,
                                     eta:Float,
                                     alpha:Float,
                                     gamma:Float,
                                     max_depth:Int,
                                     max_bin:Int,
                                     num_round:Int,
                                     missing:Int,
                                     seed:String ) 
                                    }

object CampaignSparkParameterParser {

  val mapper: ObjectMapper with ScalaObjectMapper = (new ObjectMapper() with ScalaObjectMapper)
    .registerModule(DefaultScalaModule)
    .setSerializationInclusion(JsonInclude.Include.NON_ABSENT)
    .asInstanceOf[ObjectMapper with ScalaObjectMapper]

  def parseParameters(args: Array[String]): CampaignSparkParameters = {
    mapper.readValue[CampaignSparkParameters](args(0))
  }

  def parametersToArgs(parameters: CampaignSparkParameters): Array[String] = {
    Array(
      mapper
        .writerWithDefaultPrettyPrinter()
        .writeValueAsString(parameters)
    )
  }
  def sparkParamsToMap(parameters: CampaignSparkParameters): Map[String, Any] = {
    Map(
    )
  }
}

我正在传递这样的 json 输入

输入 json val prparamas= CampaignSparkParameters( [{"category":"x","data":{"booster":"gbtree","tree_method":"hist","verbosity":"1","nthread": "cpuTask","num_workers":"35","early_stopping_rounds":"5","colsample_bytree":"0.9","subsample":"0.9","objective":"binary_logistic","eval_metric":"logloss ","lambda":"10.0","eta":"0.1","alpha":"1.0","gamma":"0.0","max_depth":"5","max_bin":"64", "num_round":"100","missing":"0","seed":"42L"}}, {"category":"y","data":{"booster":"gbtree","tree_method ":"hist","verbosity":"1","nthread":"cpuTask","num_workers":"35","early_stopping_rounds":"5","colsample_bytree":"0.9","subsample": "0.9","目标":"binary_logistic","eval_metric":"logloss","lambda":"10.0","eta":"0.1","alpha":"1.0","gamma":"0.0 ","max_depth":"5","max_bin":"64","num_round":"100","missing":"0","seed":"42L"}} ] )

调用函数val prparamas1 = prparamas.sparkParamsToMap(prparamas)

预期产出

如果 category = x 则应该映射和显示该数据。 请帮我修改上面的代码。

目前我收到错误

:5: 错误: 非法字符 '\ ' val prparamas= CampaignSparkParameters(

是一个不间断的空格字符,所以你的字符串中可能有一些你看不到的。 一个简单的替换可能会修复它:

json.replaceAll("\u00a0", " ")

或者简单地删除输入中看起来像空格的每个字符并替换为普通空格。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM