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

为JSON数组中子文档添加对应位置字段ballNo的需求

给JSON中每个deliveries子项添加ballNo字段

我现在有这样的JSON结构:

初始结构

{
  "overs": [ 
    {
      "over": 1,
      "deliveries": [{"runs":1},{"runs":0},{"runs":2},{"runs":4},{"runs":0},{"runs":0}]
    },
    {
      "over": 2,
      "deliveries": [{"runs":3},{"runs":6},{"runs":2},{"runs":0},{"runs":0},{"runs":0}]
    }
  ]
}

需要给deliveries数组的每个子对象添加ballNo字段,值为该子对象在数组中的位置(从1开始计数),最终得到:

目标结构

{
  "overs": [
    {
      "over": 1,
      "deliveries": [
        {"ballNo":1, "runs":1},
        {"ballNo":2, "runs":0},
        {"ballNo":3, "runs":2},
        {"ballNo":4, "runs":4},
        {"ballNo":5, "runs":0},
        {"ballNo":6, "runs":0}
      ]
    }, 
    {
      "over": 2,
      "deliveries": [
        {"ballNo":1, "runs":3},
        {"ballNo":2, "runs":6},
        {"ballNo":3, "runs":2},
        {"ballNo":4, "runs":0},
        {"ballNo":5, "runs":0},
        {"ballNo":6, "runs":0}
      ]
    }
  ]
}

JavaScript 实现

遍历overs数组,对每个over的deliveries数组使用map方法,结合索引(索引从0开始,需加1)生成新对象:

const data = {
  overs: [ 
    {over:1, deliveries: [{runs:1},{runs:0},{runs:2},{runs:4},{runs:0},{runs:0}]},
    {over:2, deliveries: [{runs:3},{runs:6},{runs:2},{runs:0},{runs:0},{runs:0}]}
  ]
};

const result = {
  overs: data.overs.map(over => ({
    ...over,
    deliveries: over.deliveries.map((delivery, index) => ({
      ballNo: index + 1,
      ...delivery
    }))
  }))
};

console.log(result);

Python 实现

遍历每个over,再遍历deliveries列表,用enumerate指定起始索引为1,给每个字典添加ballNo:

data = {
    "overs": [
        {"over": 1, "deliveries": [{"runs":1},{"runs":0},{"runs":2},{"runs":4},{"runs":0},{"runs":0}]},
        {"over": 2, "deliveries": [{"runs":3},{"runs":6},{"runs":2},{"runs":0},{"runs":0},{"runs":0}]}
    ]
}

for over in data["overs"]:
    for idx, delivery in enumerate(over["deliveries"], start=1):
        delivery["ballNo"] = idx

print(data)

Java 实现

使用Stream API遍历处理,给每个delivery对象添加ballNo字段:

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.stream.Collectors;

public class AddBallNo {
    public static void main(String[] args) {
        List<Map<String, Object>> overs = new ArrayList<>();
        // 初始化测试数据
        List<Map<String, Object>> deliveries1 = new ArrayList<>();
        deliveries1.add(Map.of("runs", 1));
        deliveries1.add(Map.of("runs", 0));
        deliveries1.add(Map.of("runs", 2));
        deliveries1.add(Map.of("runs", 4));
        deliveries1.add(Map.of("runs", 0));
        deliveries1.add(Map.of("runs", 0));
        overs.add(Map.of("over", 1, "deliveries", deliveries1));

        List<Map<String, Object>> deliveries2 = new ArrayList<>();
        deliveries2.add(Map.of("runs", 3));
        deliveries2.add(Map.of("runs", 6));
        deliveries2.add(Map.of("runs", 2));
        deliveries2.add(Map.of("runs", 0));
        deliveries2.add(Map.of("runs", 0));
        deliveries2.add(Map.of("runs", 0));
        overs.add(Map.of("over", 2, "deliveries", deliveries2));

        // 处理添加ballNo
        List<Map<String, Object>> processedOvers = overs.stream()
                .map(over -> {
                    int overNum = (int) over.get("over");
                    List<Map<String, Object>> deliveries = (List<Map<String, Object>>) over.get("deliveries");
                    List<Map<String, Object>> processedDeliveries = new ArrayList<>();
                    for (int i = 0; i < deliveries.size(); i++) {
                        Map<String, Object> newDelivery = deliveries.get(i).entrySet().stream()
                                .collect(Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue));
                        newDelivery.put("ballNo", i + 1);
                        processedDeliveries.add(newDelivery);
                    }
                    return Map.of("over", overNum, "deliveries", processedDeliveries);
                })
                .collect(Collectors.toList());

        System.out.println(processedOvers);
    }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 09:38:09