Я представляю, что ваша фактическая отправная точка - это что-то вроде следующего. На стороне JSON:
import groovy.json.JsonSlurper
String jsonText = '''{
"jsonWrap":{
"attrib":{
"something":{
"jsonParam1": "value1",
"jsonParam2": "value2",
"jsonParam3": "value3",
"jsonParam4": "value4",
"jsonParam5": "value5"
}
}
}
}'''
def jsonRequest = new JsonSlurper().parseText(jsonText)
На Groovy стороны:
class ObjectType {
def param1, param2, param3, param4, param5
}
def obj = new ObjectType()
Теперь, если бы я имел никакого контроля над тем, как определяются либо на стороне JSON или Groovy стороны, то я бы сделал мой darnedest к убедитесь, что имена свойств объекта «что-то» JSON точно такие же, как имена свойств класса Groovy «ObjectType». Например, как это:
class ObjectType {
def jsonParam1, jsonParam2, jsonParam3, jsonParam4, jsonParam5
}
Затем демаршаллизации на «что-то» объект в Groovy так просто, как это:
def obj = new ObjectType(jsonRequest.jsonWrap.attrib.something)
только одна ссылка на объект JSON. Только одна ссылка на объект Groovy. И первый используется для создания экземпляра последнего. Кроме того, обратите внимание, что нет необходимости вообще ссылаться на свойства. То есть объекты JSON из slurper являются экземплярами Map, поэтому, если имена свойств совпадают, вы можете использовать синтаксис «Конструктор конструктора по умолчанию».
Если, однако, вы не контролируете свойство именования в любом множестве объектов, я бы рекомендовал другую карту на основе укороченный. Сначала определим постоянную карту из одного набора имен свойств к другому, например, так:
def map = [param1:"jsonParam1", param2:"jsonParam2", param3:"jsonParam3",
param4:"jsonParam4", param5:"jsonParam5"]
Тогда я хотел бы использовать что-то вроде этого для объекта немаршалинг:
def obj = new ObjectType().with { o ->
jsonRequest.jsonWrap.attrib.something.with { j ->
map.each { oParam, jParam -> o[oParam] = j[jParam] }
}
o
}
две строки с 'param1 = ... '- это ошибки копирования и вставки? – cfrick
Почему 'jsonRequest.with {jsonWrap.attrib.something.with {' вместо просто 'jsonRequest.jsonWrap.attrib.something.with {'? – BalRog
@cfrick две строки были опечаткой. @BalRog 'jsonRequest.jsonWrap.attrib.something.with {' тоже отлично. Отредактировал код. – Halley