【问题标题】:Retrieve dynamic objects within JSON object and put to an array Groovy检索 JSON 对象中的动态对象并放入数组 Groovy
【发布时间】:2021-05-11 16:08:56
【问题描述】:

我是 Groovy 的新手,找不到与此相关的任何资源。我正在尝试从“日期”对象中提取数据并将其放入其中的固定对象数组中。原因是日期内的对象会发生变化,我想将其放入固定以便于操作:

原文:

{
"dates": {
    "2021-02-08": "8",
    "2021-02-09": "8",
    "2021-02-10": "8"
}}

想要的输出:

{
"dates": [
    {
    "date": "2021-02-08",
    "value": "8"
    },
    {
    "date": "2021-02-09",
    "value": "8"
    },
    {
    "date": "2021-02-10",
    "value": "8"
    },
]}

我正在尝试使用当前代码:

arrayList = []
arrayList.add(content[0].dates)

它返回一个 [[2021-02-08:8, 2021-02-09:8, 2021-02-10:8]],但我无法将其提取为数组。

有什么想法吗?

【问题讨论】:

    标签: json object arraylist groovy


    【解决方案1】:

    您可以通过collecting 将地图转换为列表。例如

    def json = """{"dates": { "2021-02-08": "8", "2021-02-09": "8", "2021-02-10": "8" }}"""
    def data = new groovy.json.JsonSlurper().parseText(json)
    
    def result = [dates: data.dates.collect{ k, v -> [date: k, value: v] }]
    
    println result
    // -> [dates:[[date:2021-02-08, value:8], [date:2021-02-09, value:8], [date:2021-02-10, value:8]]]
    

    【讨论】:

    • 太棒了!谢谢
    【解决方案2】:

    我已经找到了解决方案,以防有人需要它。这是一段您可以在 groovy 控制台上测试的代码:

    import groovy.json.JsonSlurper;
    import groovy.json.JsonOutput;
    
    def jsonSlurper = new JsonSlurper()
    def content= jsonSlurper.parseText '''     
    [{"dates": {
                "2021-02-08": "8",
                "2021-02-09": "8",
                "2021-02-10": "8",
            }}]
    '''
    
    arrayList = [];
    newArrayList = [];
    finalArrayList = []
    
    arrayList = content[0].dates.toString().substring(1,content[0].dates.toString().length() - 1).split(',')
    
    
    for (i = 0; i < arrayList.size(); i++){
          newArrayList.add(arrayList[i].split('='))
        }
    
    for (i = 0; i < newArrayList.size(); i++){
        finalArrayList.add('{"date": "'+ newArrayList[i][0]+ '", "value": "' + newArrayList[i][1] + '"}')
        }
    
    content[0].dates = finalArrayList
    
    println(content[0].dates)
    

    【讨论】:

    • 这可能在这里有效,但会因不同的数据而爆炸,因为“toString”不是合适的序列化格式。
    猜你喜欢
    • 1970-01-01
    • 2017-02-25
    • 2017-07-27
    • 2022-12-06
    • 2023-02-09
    • 1970-01-01
    • 2021-09-10
    • 1970-01-01
    • 2021-08-22
    相关资源
    最近更新 更多