使用Groovy JsonSlurper随机获取车辆的vehicle与name属性
优化方案:从指定环境随机获取车辆的vehicle和name属性
首先假设你的vehicles.json结构大致如下:
{ "prod": [ {"id": 1, "vehicle": "V001", "name": "Sedan A"}, {"id": 2, "vehicle": "V002", "name": "SUV B"}, {"id": 3, "vehicle": "V003", "name": "Truck C"} ], "preprod": [ {"id": 4, "vehicle": "P001", "name": "Hatchback D"} ] }
1. 解析JSON文件
Groovy自带JsonSlurper,无需额外依赖即可轻松解析JSON数据:
import groovy.json.JsonSlurper // 读取并解析JSON文件 def jsonSlurper = new JsonSlurper() def vehiclesData = jsonSlurper.parse(new File('vehicles.json'))
2. 优化随机获取方法
你可以选择返回Map快速实现,或者自定义类封装属性(更适合后续扩展),两种方案如下:
方案一:返回Map(快速落地)
def getRandomVehicleDetails(String env) { // 校验指定环境是否有可用数据 def envVehicles = vehiclesData[env] if (!envVehicles || envVehicles.isEmpty()) { throw new IllegalArgumentException("环境 ${env} 没有可用车辆数据") } // 随机选取一辆车 def randomVehicle = envVehicles[new Random().nextInt(envVehicles.size())] // 返回包含目标属性的Map return [vehicle: randomVehicle.vehicle, name: randomVehicle.name] } // 使用示例 def selected = getRandomVehicleDetails('prod') println "选中的车辆编号:${selected.vehicle},名称:${selected.name}"
方案二:自定义类封装(规范易维护)
如果后续需要扩展车辆属性,自定义类的结构会更清晰:
// 定义车辆数据类 class VehicleDetails { String vehicle String name } def getRandomVehicleDetails(String env) { def envVehicles = vehiclesData[env] if (!envVehicles || envVehicles.isEmpty()) { throw new IllegalArgumentException("环境 ${env} 没有可用车辆数据") } def randomVehicle = envVehicles[new Random().nextInt(envVehicles.size())] // 实例化自定义类并返回 return new VehicleDetails(vehicle: randomVehicle.vehicle, name: randomVehicle.name) } // 使用示例 def selected = getRandomVehicleDetails('prod') println "选中的车辆编号:${selected.vehicle},名称:${selected.name}"
额外优化建议
- 可以复用一个全局的
Random实例,避免每次调用方法都创建新对象 - 若JSON数据量极大,可改用
INDEX_OVERLAY模式解析优化内存占用:
def jsonSlurper = new JsonSlurper().setType(JsonParserType.INDEX_OVERLAY)
内容的提问来源于stack exchange,提问作者Steerpike
相关产品推荐
相关产品推荐

