java 嵌套类转json_将复杂的JSON反序列化为Java,类嵌套多个级别

我试图将Cucumber的Json输出转换为单个

Java对象.这包含嵌套四层深度的对象,我无法反序列化它.我现在正在使用杰克逊,但愿意接受建议.

这是我的Json代码:

{

"line": 1,

"elements": [

{

"line": 3,

"name": "Converteren centimeters naar voeten/inches",

"description": "",

"id": "applicatie-neemt-maten-in-cm-en-converteert-ze-naar-voet/inch,-en-vice-versa;converteren-centimeters-naar-voeten/inches",

"type": "scenario",

"keyword": "Scenario",

"steps": [

{

"result": {

"duration": 476796588,

"status": "passed"

},

"line": 4,

"name": "maak Maten-object aan met invoer in \"centimeters\"",

"match": {

"arguments": [

{

"val": "centimeters",

"offset": 37

}

],

"location": "StepDefinition.maakMatenObjectAanMetInvoerIn(String)"

},

"keyword": "Given "

},

{

"result": {

"duration": 36319,

"status": "passed"

},

"line": 5,

"name": "ik converteer",

"match": {

"location": "StepDefinition.converteerMaten()"

},

"keyword": "When "

},

{

"result": {

"duration": 49138,

"status": "passed"

},

"line": 6,

"name": "uitvoer bevat maat in \"voeten/inches\"",

"match": {

"arguments": [

{

"val": "voeten/inches",

"offset": 23

}

],

"location": "StepDefinition.uitvoerBevatMaatIn(String)"

},

"keyword": "Then "

}

]

},

{

"line": 8,

"name": "Converteren voeten/inches naar centimeters",

"description": "",

"id": "applicatie-neemt-maten-in-cm-en-converteert-ze-naar-voet/inch,-en-vice-versa;converteren-voeten/inches-naar-centimeters",

"type": "scenario",

"keyword": "Scenario",

"steps": [

{

"result": {

"duration": 84175,

"status": "passed"

},

"line": 9,

"name": "maak Maten-object aan met invoer in \"voeten/inches\"",

"match": {

"arguments": [

{

"val": "voeten/inches",

"offset": 37

}

],

"location": "StepDefinition.maakMatenObjectAanMetInvoerIn(String)"

},

"keyword": "Given "

},

{

"result": {

"duration": 23928,

"status": "passed"

},

"line": 10,

"name": "ik converteer",

"match": {

"location": "StepDefinition.converteerMaten()"

},

"keyword": "When "

},

{

"result": {

"duration": 55547,

"status": "passed"

},

"line": 11,

"name": "uitvoer bevat maat in \"centimeters\"",

"match": {

"arguments": [

{

"val": "centimeters",

"offset": 23

}

],

"location": "StepDefinition.uitvoerBevatMaatIn(String)"

},

"keyword": "Then "

}

]

}

],

"name": "Applicatie neemt maten in cm en converteert ze naar voet/inch, en vice versa",

"description": "",

"id": "applicatie-neemt-maten-in-cm-en-converteert-ze-naar-voet/inch,-en-vice-versa",

"keyword": "Feature",

"uri": "sample.feature"

}

我尝试了很多不同的方法.首先我使用了嵌套的内部类,但是看起来你必须让它们成为静态的,我担心这样做是不行的,因为我在同一个对象中有多个实例(例如,根中有多个“元素” – 对象).然后我尝试将它们放在单独的类中,使用Json注释.这就是我的地方(省略了setters):

public class CucumberUitvoer {

private String name;

private String description;

private String id;

private String keyword;

private String uri;

private int line;

@JsonProperty("elements")

private List elements;

public CucumberUitvoer(){}

}

public class FeatureObject {

private String name;

private String description;

private String id;

private String type;

private String keyword;

private int line;

@JsonProperty("steps")

private List steps;

public FeatureObject() {

}

}

public class StepObject {

@JsonProperty("result")

private ResultObject result;

private String name;

private String given;

private String location;

private String keyword;

private int line;

@JsonProperty("match")

private MatchObject match;

public StepObject(){}

}

public class ResultObject {

private int duration;

private String status;

public ResultObject(){}

}

public class MatchObject {

@JsonProperty("arguments")

private List arguments;

private String location;

public MatchObject(){}

}

public class ArgumentObject {

private String val;

private String offset;

public ArgumentObject(){}

}

为了澄清,here是嵌套如何工作的类图.

此解决方案给出了以下错误:

com.fasterxml.jackson.databind.JsonMappingException: Can not deserialize instance of nl.icaprojecten.TestIntegratieQuintor.JSONInterpreter.CucumberUitvoer out of START_ARRAY token

这是执行实际映射的代码:

ObjectMapper mapper = new ObjectMapper();

mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);

CucumberUitvoer obj1 = null;

try {

obj1 = mapper.readValue(json, CucumberUitvoer.class);

} catch (IOException e) {

e.printStackTrace();

}

有没有快速解决这种方法使其工作,或者我应该尝试完全不同的东西?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值