1

我有一个代表 100 个对象的数组的 JSON 文档,我需要分批处理这个文档,例如每批 10 个对象。

def text = '[{1st},{2nd},{3rd},{4th},...{100th}]'
def json = new groovy.json.JsonSlurper().parseText(text)

现在我需要从text( [{1st},{2nd},..{10th}]) 中获取前 10 个元素并将它们发布到 Web 服务中,然后再获取另外 10 个 ( [{11th},{12th}...{20th}]) 等等。

我已经在 C# 中尝试过,但在 Groovy 中无法做到这一点。

任何人都建议我send batches of json每次改变json总数的最佳方法dynamically

4

1 回答 1

2

GroovyIterable.collate(int size)通过类添加方法DefaultGroovyMethods,您可以使用它将输入数组拆分为 n 大小的块,例如

['a','b','c','d','e'].collate(3) == [['a','b','c'], ['d','e']]

考虑以下示例:

import groovy.json.JsonOutput
import groovy.json.JsonSlurper

final String text = '[{"id": 1}, {"id": 2}, {"id": 3}, {"id": 4}, {"id": 5}, {"id": 6}]'

final List<Map> json = new JsonSlurper().parseText(text) as List<Map>

json.collate(2).each { part ->
    final String out = JsonOutput.toJson(part)

    println "Sending following JSON object: ${out}"
}

Run in Groovy web console

这里我们有一个包含 6 个对象的 JSON 数组。我们将这个 JSON 解析为一个List<Map>对象,然后我们分成大小为 2 的块并准备 JSON 以供以后执行。我只使用了 6 个对象作为说明,但是如果初始列表包含 100 个对象并且我们分成大小为 10 的块并不重要 - 算法是相同的。

它可以概括和描述为以下步骤:

  1. 解析对象的初始 JSON 数组
  2. 将数组拆分为大小为 10 的块
  3. 将 10 个对象的块格式化为 JSON 字符串
  4. 处理 JSON 文档

上面显示的示例产生以下输出:

Sending following JSON object: [{"id":1},{"id":2}]
Sending following JSON object: [{"id":3},{"id":4}]
Sending following JSON object: [{"id":5},{"id":6}]
于 2018-04-10T06:16:55.040 回答