You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Scala基础包自带JSON工具如何提取JSON目标数组用于并行查询

基于Scala标准库解析JSON获取查询数组的实现方案

报错根因

  • scala.util.parsing.json.JSON.parseFull返回值是Any类型,Scala编译器不知道这个Any到底是字符串、数字还是集合类型,自然无法直接调用toArray这类集合方法,必须顺着JSON的实际结构逐层完成类型收敛后才能操作集合
  • 原有代码中getOrElse(0)存在逻辑隐患:如果JSON解析失败会返回整型0,后续做类型转换时会触发无明确提示的类转换异常
  • 使用scala.util.parsing.json解析时的默认映射规则:JSON对象映射为Map[String, Any],JSON数组映射为List[Any],JSON字符串映射为String类型

无第三方依赖的实现代码

所有逻辑完全基于Scala和JDK内置能力实现,适配严格的依赖管控规则:

import scala.util.parsing.json.JSON
import scala.io.Source

val input_file = "[path]/FeatureMapping.json"
// 读取文件内容,显式关闭文件流避免资源泄漏
val fileSource = Source.fromFile(input_file)
val jsonContent = fileSource.mkString
fileSource.close()

// 通过模式匹配逐层校验结构合法性,避免硬转崩溃
JSON.parseFull(jsonContent) match {
  // 匹配根结构为Map(对应最外层的JSON对象)
  case Some(rootMap: Map[_, _]) =>
    // 取出TestModel对应的配置值
    rootMap.get("TestModel") match {
      // 匹配值为List结构(对应JSON数组)
      case Some(queryList: List[_]) =>
        // 将列表元素逐个转为String类型,转换为Array类型
        val queryArray = queryList.map(_.asInstanceOf[String]).toArray
        // 若需并行执行,直接对数组调用.par获得并行集合即可,示例:
        queryArray.par.foreach(cql => {
          // 在此处写入你执行CQL查询的业务逻辑
          println(s"并行执行CQL:$cql")
        })
      case None => throw new IllegalArgumentException("JSON中缺失TestModel配置项")
      case invalidValue => throw new IllegalArgumentException(s"TestModel对应值不是数组结构,实际类型为${invalidValue.getClass}")
    }
  case None => throw new IllegalArgumentException("JSON格式不合法,解析失败")
  case invalidRoot => throw new IllegalArgumentException(s"JSON根结构不是对象类型,实际内容为$invalidRoot")
}

实现说明

  • 最终得到的queryArray类型为Array[String],完全满足并行执行查询语句的POC需求
  • 所有类型转换前置了结构合法性校验,出现结构不匹配时会抛出明确的错误信息,不会触发无提示的类转换异常
  • 整个流程未引入任何外部第三方依赖,完全适配企业级依赖引入规则

内容的提问来源于stack exchange,提问作者troyblerg

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.24 06:15:05