在Java / Groovy中将XML转换为Object []

时间:2015-02-18 13:17:54

标签: java xml json groovy

我有XML,就像这样:

<jobs>
  <no>2</no>
  <job>
    <status>Completed</status>
  </job>
  <job>
    <status>In Progress</status>
  </job>
</jobs>

我试过了:

def xmlmapper = new XmlMapper()
def obj = xmlmapper.readValue(xml, Object[].class)

然后我接受obj并通过它进行迭代,但似乎一切都是字符串,我希望“不”是int。

我的问题是,有没有办法,通过使用杰克逊映射器类来获取整数? 我想,如果我首先使用标准的json库将该XML转换为JSON,然后将JSON转换为Object,那将包含整数。 杰克逊应该做同样的事情,首先转换为json,然而xmlmapper似乎行为不同,所以我不确定我在这里真正想念的是什么......

1 个答案:

答案 0 :(得分:1)

您可以使用类映射到所需字段所需类型的位置。例如。 (见XXX

@Grab('com.fasterxml.jackson.dataformat:jackson-dataformat-xml:2.5.1')
import groovy.transform.ToString
import com.fasterxml.jackson.dataformat.xml.XmlMapper
import com.fasterxml.jackson.dataformat.xml.annotation.*

@ToString
class Jobs {
    Integer no // XXX
    @ToString
    static class Job {
        String status
    }
    @JacksonXmlElementWrapper(useWrapping=false)
    List<Job> job
}

def xml="""<jobs><no>2</no><job><status>Completed</status></job><job><status>In Progress</status></job></jobs>"""

def xmlmapper = new XmlMapper()
def jobs = xmlmapper.readValue(xml, Jobs)
assert jobs.no==2
assert jobs.job.size()==jobs.no
assert jobs.toString()=='Jobs(2, [Jobs$Job(Completed), Jobs$Job(In Progress)])'