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

如何在Scala中从JSON生成合并值列表并按条件拆分输出?

Scala实现指定JSON数据处理需求

输入JSON

[{    
    "Orders": {        
        "orderid": {            
            "path": "order_id",            
            "type": "CHAR",            
            "is_explode_required": "N"        
        },        
        "customerId": {            
            "path": "customers.customerId",            
            "type": "CHAR",            
            "is_explode_required": "N"        
        },        
        "offerid": {            
            "path": "Offers.Offerid",            
            "type": "LIST",            
            "is_explode_required": "Y"        
    }    },    
    "products": {        
        "productid": {            
            "path": "product_id",            
            "type": "CHAR",            
            "is_explode_required": "N"        
        },        
        "productName": {            
            "path": "products.productname",            
            "type": "CHAR",            
            "is_explode_required": "N"        
        }    
    }
}]

需求说明

处理上述JSON中的Orders节点,生成两列结果:

  • output:拼接Orders下所有子节点的path值,用逗号分隔
  • explode_output:仅拼接Orders下is_explode_required属性为"Y"的子节点的path值

Scala实现代码(基于Play JSON库)

import play.api.libs.json._

object JsonProcessor extends App {
  // 输入JSON字符串
  val inputJson = """[{    
      "Orders": {        
          "orderid": {            
              "path": "order_id",            
              "type": "CHAR",            
              "is_explode_required": "N"        
          },        
          "customerId": {            
              "path": "customers.customerId",            
              "type": "CHAR",            
              "is_explode_required": "N"        
          },        
          "offerid": {            
              "path": "Offers.Offerid",            
              "type": "LIST",            
              "is_explode_required": "Y"        
      }    },    
      "products": {        
          "productid": {            
              "path": "product_id",            
              "type": "CHAR",            
              "is_explode_required": "N"        
          },        
          "productName": {            
              "path": "products.productname",            
              "type": "CHAR",            
              "is_explode_required": "N"        
          }    
      }
  }]"""

  // 解析JSON
  val parsedJson = Json.parse(inputJson)

  // 提取Orders节点下的所有子对象
  val ordersChildren = (parsedJson(0) \ "Orders").as[JsObject].values

  // 生成output列:所有path值拼接
  val outputCol = ordersChildren.map(_.as[JsObject]("path").as[String]).mkString(",")

  // 生成explode_output列:筛选符合条件的path值拼接
  val explodeOutputCol = ordersChildren
    .filter(child => (child \ "is_explode_required").as[String] == "Y")
    .map(_.as[JsObject]("path").as[String])
    .mkString(",")

  // 打印结果
  println("output| explode_output")
  println(s"$outputCol|$explodeOutputCol")
}

依赖配置

如果使用Play JSON,需要在build.sbt中添加以下依赖:

libraryDependencies += "com.typesafe.play" %% "play-json" % "2.9.2"

预期输出

output| explode_output
order_id,customers.customerId,Offers.Offerid|Offers.Offerid

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.27 23:47:31