Версия Groovy: 2.4.6 JAVA 1.7
Попытка преобразовать следующий большой двоичный объект JSON в XML. У меня есть другие записи больших двоичных объектов JSON, которые отличаются по структуре, объектам в JSON из разных заданий Jenkins, типу заданий, нет. параметров и т. д. Конечная цель — преобразовать файл JSON (из коллекции MongoDB; команда mongoexport) в XML и, наконец, импортировать его в строки EXCEL (которые доступны в Excel из коробки на вкладке «Данные»).
Пример записи большого двоичного объекта JSON (подтверждено JSON Pretty Print):
{
"_id": {
"$oid": "5120349es967yhsdfs907c4f"
},
"actions": [
{
"causes": [
{
"shortDescription": "Started by an SCM change"
}
]
},
{
},
{
"oneClickDeployPossible": false,
"oneClickDeployReady": false,
"oneClickDeployValid": false
},
{
},
{
},
{
},
{
"cspec": "element * .../MyProject_latest_int/LATESTnelement * .../MyProject_integration/LATESTnelement /vobs/some_vob/gigi /main/myproject_integration/MyProject_Slot_0_maint_int/LATESTnelement * .../myproject_integration/LATESTnelement /vobs/some_vob /main/LATEST",
"latestBlsOnConfiguredStream": null,
"stream": null
},
{
},
{
"parameters": [
{
"name": "CLEARCASE_VIEWTAG",
"value": "jenkins_MyProject_latest"
},
{
"name": "BUILD_DEBUG",
"value": false
},
{
"name": "CLEAN_BUILD",
"value": true
},
{
"name": "BASEVERSION",
"value": "7.4.1"
},
{
"name": "ARTIFACTID",
"value": "lowercaseprojectname"
},
{
"name": "SYSTEM",
"value": "myprojectSystem"
},
{
"name": "LOT",
"value": "02"
},
{
"name": "PIPENUMBER",
"value": "7.4.1.303"
}
]
},
{
},
{
},
{
"parameters": [
{
"name": "DESCRIPTION_SETTER_DESCRIPTION",
"value": "lowercaseprojectname_V7.4.1.303"
}
]
},
{
},
{
},
{
},
{
}
],
"artifacts": [
],
"building": false,
"builtOn": "servername",
"changeSet": {
"items": [
{
"affectedPaths": [
"vobs/some_vob/myproject/apps/app1/Java/test/src/com/giga/highlevelproject/myproject/schedule/validation/SomeActivityTest.java"
],
"author": {
"absoluteUrl": "http://11.22.33.44:8080/user/hitj1620",
"fullName": "name1, name2 A"
},
"commitId": null,
"date": {
"$numberLong": "1489439532000"
},
"dateStr": "13/03/2017 21:12:12",
"elements": [
{
"action": "create version",
"editType": "edit",
"file": "/vobs/some_vob/myproject/apps/app1/Java/test/src/com/giga/highlevelproject/myproject/schedule/validation/SomeActivityTest.java",
"operation": "checkin",
"version": "/main/MyProject_latest_int/2"
}
],
"msg": "",
"timestamp": -1,
"user": "user111"
}
],
"kind": null
},
"culprits": [
{
"absoluteUrl": "http://11.22.33.44:8080/user/nuka1620",
"fullName": "nuka, Chuck"
}
],
"description": "lowercaseprojectname_V7.4.1.303",
"displayName": "#303",
"duration": 525758,
"estimatedDuration": 306374,
"executor": null,
"fullDisplayName": "MyProject u00bb MyProject-build #303",
"highlevelproject_metrics_source_url": "http://11.22.33.44:8080/job/MyProject/job/MyProject-build/303//api/json",
"id": "303",
"keepLog": false,
"number": 303,
"projectName": "MyProject-build",
"queueId": 8201,
"result": "SUCCESS",
"timeToRepair": null,
"timestamp": {
"$numberLong": "1489439650307"
},
"url": "http://11.22.33.44:8080/job/MyProject/job/MyProject-build/303/"
}
Пробовал несколько сообщений для JSON >>> Решения для преобразования XML, но они либо являются пользовательским решением, либо не работают для создания выходных данных, которые можно успешно импортировать в файл EXCEL (через импорт данных Excel).
Я использовал следующий код Groovy:
import net.sf.json.JSON
import net.sf.json.JSONSerializer
import net.sf.json.xml.XMLSerializer
def str = "{ \"_id\": { \"$oid\": \"5120349es967yhsdfs907c4f\"}, \"actions\": [ { \"causes\": [ { \"shortDescription\": \"Started by an SCM change\"} ]}, {}, { \"oneClickDeployPossible\": false, \"oneClickDeployReady\": false, \"oneClickDeployValid\": false}, {}, {}, {}, { \"cspec\": \"element * .../MyProject_latest_int/LATESTnelement * .../MyProject_integration/LATESTnelement /vobs/some_vob/gigi /main/myproject_integration/MyProject_Slot_0_maint_int/LATESTnelement * .../myproject_integration/LATESTnelement /vobs/some_vob /main/LATEST\", \"latestBlsOnConfiguredStream\": null, \"stream\": null}, {}, { \"parameters\": [ { \"name\": \"CLEARCASE_VIEWTAG\", \"value\": \"jenkins_MyProject_latest\"}, { \"name\": \"BUILD_DEBUG\", \"value\": false}, { \"name\": \"CLEAN_BUILD\", \"value\": true}, { \"name\": \"BASEVERSION\", \"value\": \"7.4.1\"}, { \"name\": \"ARTIFACTID\", \"value\": \"lowercaseprojectname\"}, { \"name\": \"SYSTEM\", \"value\": \"myprojectSystem\"}, { \"name\": \"LOT\", \"value\": \"02\"}, { \"name\": \"PIPENUMBER\", \"value\": \"7.4.1.303\"} ]}, {}, {}, { \"parameters\": [ { \"name\": \"DESCRIPTION_SETTER_DESCRIPTION\", \"value\": \"lowercaseprojectname_V7.4.1.303\"} ]}, {}, {}, {}, {} ], \"artifacts\": [ ], \"building\": false, \"builtOn\": \"servername\", \"changeSet\": { \"items\": [ { \"affectedPaths\": [ \"vobs/some_vob/myproject/apps/app1/Java/test/src/com/giga/highlevelproject/myproject/schedule/validation/SomeActivityTest.java\" ], \"author\": { \"absoluteUrl\": \"http://11.22.33.44:8080/user/hitj1620\", \"fullName\": \"name1, name2 A\"}, \"commitId\": null, \"date\": { \"$numberLong\": \"1489439532000\"}, \"dateStr\": \"13/03/2017 21:12:12\", \"elements\": [ { \"action\": \"create version\", \"editType\": \"edit\", \"file\": \"/vobs/some_vob/myproject/apps/app1/Java/test/src/com/giga/highlevelproject/myproject/schedule/validation/SomeActivityTest.java\", \"operation\": \"checkin\", \"version\": \"/main/MyProject_latest_int/2\"} ], \"msg\": \"\", \"timestamp\": -1, \"user\": \"user111\"} ], \"kind\": null}, \"culprits\": [ { \"absoluteUrl\": \"http://11.22.33.44:8080/user/nuka1620\", \"fullName\": \"nuka, Chuck\"} ], \"description\": \"lowercaseprojectname_V7.4.1.303\", \"displayName\": \"#303\", \"duration\": 525758, \"estimatedDuration\": 306374, \"executor\": null, \"fullDisplayName\": \"MyProject u00bb MyProject-build #303\", \"highlevelproject_metrics_source_url\": \"http://11.22.33.44:8080/job/MyProject/job/MyProject-build/303//api/json\", \"id\": \"303\", \"keepLog\": false, \"number\": 303, \"projectName\": \"MyProject-build\", \"queueId\": 8201, \"result\": \"SUCCESS\", \"timeToRepair\": null, \"timestamp\": { \"$numberLong\": \"1489439650307\"}, \"url\": \"http://11.22.33.44:8080/job/MyProject/job/MyProject-build/303/\"}"
JSON json = JSONSerializer.toJSON( str )
XMLSerializer xmlSerializer = new XMLSerializer()
xmlSerializer.setTypeHintsCompatibility( false )
String xml = xmlSerializer.write( json )
System.out.println(xml)
Что дает мне следующее сообщение об ошибке, почему я получаю эту ошибку, когда JSON lint/validation показывает, что это действительный JSON:
Caught: nu.xom.IllegalNameException: NCNames cannot start with the character 24
nu.xom.IllegalNameException: NCNames cannot start with the character 24
at nu.xom.Verifier.throwIllegalNameException(Unknown Source)
at nu.xom.Verifier.checkNCName(Unknown Source)
at nu.xom.Element._setLocalName(Unknown Source)
at nu.xom.Element.<init>(Unknown Source)
at nu.xom.Element.<init>(Unknown Source)
at net.sf.json.xml.XMLSerializer.newElement(XMLSerializer.java:869)
at net.sf.json.xml.XMLSerializer.processJSONObject(XMLSerializer.java:989)
at net.sf.json.xml.XMLSerializer.processJSONValue(XMLSerializer.java:1040)
at net.sf.json.xml.XMLSerializer.processJSONObject(XMLSerializer.java:990)
at net.sf.json.xml.XMLSerializer.write(XMLSerializer.java:605)
at net.sf.json.xml.XMLSerializer.write(XMLSerializer.java:570)
at net.sf.json.xml.XMLSerializer$write$0.call(Unknown Source)
at ConvertJson2xml.run(ConvertJson2xml.groovy:110)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:147)
Process finished with exit code 1