簡體   English   中英

如何在 groovy 中使用 map 創建 JSON

[英]How to create JSON using map in groovy

在 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

這是我發現除了 JSONBuilder 之外形成 json(使用 map)的正確方法嗎,Map 也是另一種創建 JSON 的方法。 早些時候,我使用 org.json 來創建動態 json 規范化腳本,因此,如果我使用的上述方法是正確的,那么我可以繼續使用 java 代碼中的 groovy 腳本從 JSON-JSON 生成動態數據規范化。

不是 100% 輸出應該是什么樣子,而是腳本

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 ) )

產生以下輸出:

{
    "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"
            }
        ]
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM