如何在groovy中使用map创建JSON

如何在groovy中使用map创建JSON,groovy,Groovy,在groovy中,如何使用下面的输入在下面的两种结构中创建输出json。我已经用java做过了,但是我不知道如何用groovy做 输入: { "name": "app", "test2": [ { "status": [ { "id": 1, "pole": [ {

在groovy中,如何使用下面的输入在下面的两种结构中创建输出json。我已经用java做过了,但是我不知道如何用groovy做

输入:

{
  "name": "app",
  "test2": [
    {
      "status": [
        {
          "id": 1,
          "pole": [
            {
              "Color": "RED",
              "Status": 0
            },
            {
              "Color": "AMBER",
              "Status": 0
            },
            {
              "Color": "GREEN",
              "Status": 0
            }
          ]
        },
        {
          "id": 2,
          "pole": [
            {
              "Color": "RED",
              "Status": 0
            },
            {
              "Color": "AMBER",
              "Status": 0
            },
            {
              "Color": "GREEN",
              "Status": 0
            }
          ]
        }
      ]
    },
    {
      "status": [
        {
          "id": 1,
          "pole": [
            {
              "Color": "RED",
              "Status": 0
            },
            {
              "Color": "AMBER",
              "Status": 0
            },
            {
              "Color": "GREEN",
              "Status": 0
            }
          ]
        },
        {
          "id": 2,
          "pole": [
            {
              "Color": "RED",
              "Status": 0
            },
            {
              "Color": "AMBER",
              "Status": 0
            },
            {
              "Color": "GREEN",
              "Status": 0
            }
          ]
        }
      ]
    }
  ]
}
输出1: 应该生成一对多输出,通过迭代需要生成以下结构的多个输出。与以下输出一样,它应该生成12个JSON对象

{
  "OUTPUT": {
    "STATUS": {
      "id": "1",
      "color": "RED"
    }
  }
}
输出2:

{
      "OUTPUT": {
        "STATUS": [{
          "id": "1",
          "color": "RED"
        },{
          "id": "1",
          "color": "AMBER"
        }
        .
        .
        {
          "id": "2",
          "color": "RED"
        }
      ]
      }
    }
因为我是groovy的新手,所以我不太清楚如何做到这一点

下面是到目前为止我已经尝试过的代码

import groovy.json.*;

def data='''{"name": "app","test2": [{"status": [{"id": 1,"pole": [{"Color": "RED","Status": 0},{"Color": "AMBER","Status": 0},{"Color": "GREEN","Status": 0}]},{"id": 2,"pole": [{"Color": "RED","Status": 0},{"Color": "AMBER","Status": 0},{"Color": "GREEN","Status": 0}]}]},{"status": [{"id": 1,"pole": [{"Color": "RED","Status": 0},{"Color": "AMBER","Status": 0},{"Color": "GREEN","Status": 0}]},{"id": 2,"pole": [{"Color": "RED","Status": 0},{"Color": "AMBER","Status": 0},{"Color": "GREEN","Status": 0}]}]}]}'''


def data1 = new JsonSlurper().parseText( data );

def a=[:]
def OU=[:]
def status=[]
a.OUTPUT=OU
OU.STATUS=status
for(def i=0;i<data1.test2.size();i++){
for(def j=0;j<data1.test2[i].status.size();j++){
    def b=[:]
   b.id=data1.test2[i].status[j].id
   for(def k=0;k<data1.test2[i].status[j].pole.size();k++){
       b.color=data1.test2[i].status[j].pole[k].Color
       status<<b
   }
}
}





String finalJson = JsonOutput.toJson a;
println finalJson
import groovy.json.*;
def data='{“name”:“app”,“test2”:[{“status”:[{“id”:1,“pole”:[{“Color”:“RED”,“status”:0},{“Color”:“AMBER”,“status”:0},{“Color”:“GREEN”,“status”:0}]},{“Color”:“RED”,“status”:0},{“Color”:“GREEN”,“status”:“status”:0},{“Color”:“GREEN”,“status”:“status”:“{“id”:1,“pole”:“Color”:“RED,“状态”:0},{“颜色”:“绿色”,“状态”:0}]},{“id”:2,“极”:[{“颜色”:“红色”,“状态”:0},{“颜色”:“琥珀色”,“状态”:0},{“颜色”:“绿色”,“状态”:0}]}]}''
def data1=new JsonSlurper().parseText(数据);
def a=[:]
def OU=[:]
def状态=[]
a、 输出=OU
OU.STATUS=状态

对于(defi=0;i100%不是输出应该是什么样子,而是脚本

import groovy.json.*

def data='''{"name": "app","test2": [{"status": [{"id": 1,"pole": [{"Color": "RED","Status": 0},{"Color": "AMBER","Status": 0},{"Color": "GREEN","Status": 0}]},{"id": 2,"pole": [{"Color": "RED","Status": 0},{"Color": "AMBER","Status": 0},{"Color": "GREEN","Status": 0}]}]},{"status": [{"id": 1,"pole": [{"Color": "RED","Status": 0},{"Color": "AMBER","Status": 0},{"Color": "GREEN","Status": 0}]},{"id": 2,"pole": [{"Color": "RED","Status": 0},{"Color": "AMBER","Status": 0},{"Color": "GREEN","Status": 0}]}]}]}'''

def data1 = new JsonSlurper().parseText data

def output = [ OUTPUT:[
  STATUS:data1.test2.status.inject( [] ){ res, curr ->
    curr.each{ stat ->
      stat.pole.each{
        res << [ id:stat.id, color:it.Color ]
      }
    }
    res
  }
] ]

println JsonOutput.prettyPrint( JsonOutput.toJson( output ) )

(对我)不清楚期望的输出应该是什么。您有两组期望的输出吗?我已经更新了问题,我的代码正在运行。您能检查一下创建JSON的正确方法吗?我是groovy新手。我正在使用groovy脚本创建JSON规范化,但这是通过使用输入和输出JSON映射动态生成的,我正在创建groovyscript使用JAVA并上传到引擎。因此,如果上述方法有效,那么我将继续,因为在上述方法中,生成脚本很容易,但是如果我使用JSONBuilder和闭包,那么生成脚本可能会很困难。因此,我只需要在这里输入。我已经更新了问题,我的代码正在运行,你能告诉我吗检查是否是创建JSON的正确方法,因为我是groovy新手。我使用groovy脚本创建JSON规范化,但这是通过使用输入和输出JSON映射动态生成的,我使用JAVA创建groovyscript并上载到引擎。因此,如果上述方法有效,那么我将继续,因为在上述方法中生成脚本很容易,但如果我使用JSONBuilder和闭包,那么生成脚本可能会很困难。因此,我只需要在这里输入您的输入。是的,谢谢您,但由于我使用需要部署的JAVA动态生成脚本。我想要像我编写的那样的编码模式,所以脚本生成逻辑将很容易。所以,如果你能提供一些信息,比如这种方法是否有效,这会很有帮助?
{
    "OUTPUT": {
        "STATUS": [
            {
                "id": 1,
                "color": "RED"
            },
            {
                "id": 1,
                "color": "AMBER"
            },
            {
                "id": 1,
                "color": "GREEN"
            },
            {
                "id": 2,
                "color": "RED"
            },
            {
                "id": 2,
                "color": "AMBER"
            },
            {
                "id": 2,
                "color": "GREEN"
            },
            {
                "id": 1,
                "color": "RED"
            },
            {
                "id": 1,
                "color": "AMBER"
            },
            {
                "id": 1,
                "color": "GREEN"
            },
            {
                "id": 2,
                "color": "RED"
            },
            {
                "id": 2,
                "color": "AMBER"
            },
            {
                "id": 2,
                "color": "GREEN"
            }
        ]
    }
}