[英]Groovy - JSON output not quite as required
我在 Groovy 中编写了一些代码来解析结构化的 XML 文件,创建一些平面数据行,并 output 这些以特定的 JSON 格式。 我对最后一部分有疑问 - 几个小时后,我仍然只能非常接近所需的结构,但不完全相同。
代码是:
package test
import groovy.json.JsonBuilder
import groovy.json.JsonSlurper
import groovy.util.slurpersupport.NodeChild
import java.lang.reflect.Array
import java.sql.Timestamp
import java.text.SimpleDateFormat
import groovy.json.JsonOutput
class builder7 {
static void main (String[] args) {
def inputXML = new File("C:\\Users\\Someone\\Downloads\\xml\\salesOrderIdoc.xml");
def doc = new XmlSlurper().parse(inputXML)
def salesorg
def qual
def matq
String row = ""
def orders = []
def orderssplit = []
def fields = []
fields << "Field1"
fields << "Field2"
fields << "Field3"
doc.E1EDK14.each { hd ->
qual = hd.QUALF.text()
if (qual == '008') {
salesorg = hd.ORGID.text()
}
}
doc.E1EDP01.each{ item->
row = salesorg + "," + "${item.POSEX[0].text()}"
item.E1EDP19.each{ mat->
matq = mat.QUALF.text()
if (matq == '003') {
def material = mat.IDTNR.text()
row = row + "," + material
}
}
orders << row
def values = row.split(',')
orderssplit << values
}
def builder = new groovy.json.JsonBuilder()
def root = builder{
scenario (
Name: 'Rescheduling',
Scope: 'Public'
)
Table(
Namespace: 'OrderOpt',
Name: 'ShipmentSize'
)
Fields(fields
)
Rows{
Values (orderssplit)
}
}
println builder.toPrettyString()
}
}
结果 output 是:
{
"scenario": {
"Name": "Rescheduling",
"Scope": "Public"
},
"Table": {
"Namespace": "OrderOpt",
"Name": "ShipmentSize"
},
"Fields": [
"Field1",
"Field2",
"Field3"
],
"Rows": {
"Values": [
[
"PT04",
"10",
"8410104437749"
],
[
"PT04",
"20",
"9300631115434"
],
[
"PT04",
"30",
"5601217110664"
],
[
"PT04",
"40",
"5601217110657"
],
[
"PT04",
"50",
"7805010001909"
],
[
"PT04",
"60",
"3059944021869"
],
[
"PT04",
"70",
"5011417549247"
],
[
"PT04",
"80",
"3059944021845"
],
[
"PT04",
"90",
"8410104882143"
],
[
"PT04",
"100",
"8410104882051"
],
[
"PT04",
"110",
"5701092103017"
],
[
"PT04",
"120",
"8410104274160"
],
[
"PT04",
"130",
"8410104391737"
],
[
"PT04",
"140",
"8410104882082"
],
[
"PT04",
"150",
"8410104249618"
],
[
"PT04",
"160",
"8410104437855"
],
[
"PT04",
"170",
"8410104882136"
]
]
}
}
但是,所需的 output 应该有
"Rows":[
{
"Values":[
代替
"Rows": {
"Values": [
显然我对此并不陌生,但我已尽我所能找到解决方案,但未能成功。
要求的格式:
{
"Scenario":{
"Name":"Order Rescheduling",
"Scope":"Public"
},
"Table":{
"Namespace":"OrderOpt",
"Name":"ShipmentSize"
},
"Fields":[
"Field1",
"Field2",
"Field3"
],
"DataUpdate":{
"DataSource":"Order Optimizer",
"DataFile":"ShipmentSize.tab"
},
"Rows":[
{
"Values":[
"PT04",
"10",
"8410104437749"
]
},
{
"Values":[
"PT04",
"20",
"9300631115434"
]
},
{
"Values":[
"PT04",
"30",
"5601217110664"
]
},
{
"Values":[
"PT04",
"40",
"5601217110657"
]
},
{
"Values":[
"PT04",
"50",
"7805010001909"
]
},
{
"Values":[
"PT04",
"60",
"3059944021869"
]
},
{
"Values":[
"PT04",
"70",
"5011417549247"
]
},
{
"Values":[
"PT04",
"80",
"3059944021845"
]
},
{
"Values":[
"PT04",
"90",
"8410104882143"
]
},
{
"Values":[
"PT04",
"100",
"8410104882051"
]
},
{
"Values":[
"PT04",
"110",
"5701092103017"
]
},
{
"Values":[
"PT04",
"120",
"8410104274160"
]
},
{
"Values":[
"PT04",
"130",
"8410104391737"
]
},
{
"Values":[
"PT04",
"140",
"8410104882082"
]
},
{
"Values":[
"PT04",
"150",
"8410104249618"
]
},
{
"Values":[
"PT04",
"160",
"8410104437855"
]
},
{
"Values":[
"PT04",
"170",
"8410104882136"
]
}
]
}
亲切的问候
乔治
def builder = new groovy.json.JsonBuilder()
def root = builder{
scenario (
Name: 'Rescheduling',
Scope: 'Public'
)
Table(
Namespace: 'OrderOpt',
Name: 'ShipmentSize'
)
Fields(fields
)
DataUpdate(
DataSource: 'Order Optimizer',
DataFile: "ShipmentSize.tab"
)
Rows(
orderssplit.collect { ords->
["Values":ords]
}
)
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.