[英]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.