gpt4 book ai didi

java - 合并 Json 对象

转载 作者:行者123 更新时间:2023-11-30 08:49:12 26 4
gpt4 key购买 nike

我有两个json

1. 

{"root": {
"item": [
{
"groupName": "Al Karama Fire Station",
"vehicleId": 211,
"speed": 81
},
{
"groupName": "Al Karama Fire Station",
"vehicleId": 137,
"speed": 83
}
],
"rowCount": 2
}}

2. 



{"root": {
"item": {
"groupName": "Al Karama Fire Station",
"vehicleId": 222,
"speed": 1
},
"rowCount": 1
}}

理想情况下,第二个 json 应该给我一个“项目”列表,但它没有发生。我需要转换合并两个 json 以获得组合的一个。

预期:

{"root": {
"item": [
{
"groupName": "Al Karama Fire Station",
"vehicleId": 211,
"speed": 81
},
{
"groupName": "Al Karama Fire Station",
"vehicleId": 137,
"speed": 83
},
{
"groupName": "Al Karama Fire Station",
"vehicleId": 222,
"speed": 1
}
],
"rowCount": 3
}}

为此,我创建了以下 DTO。

public class ParentDTO {

private RootDTO root;

public RootDTO getRoot() {
return root;
}
public void setRoot(RootDTO root) {
this.root = root;
}
}

public class RootDTO {
private List<ItemDTO> item = new ArrayList<ItemDTO>();
private Integer rowCount;

public List<ItemDTO> getItem() {
return item;
}
public void setItem(List<ItemDTO> item) {
this.item = item;
}
public Integer getRowCount() {
return rowCount;
}
public void setRowCount(Integer rowCount) {
this.rowCount = rowCount;
}
}

public class ItemDTO {

private String groupName;
private String vehicleId;
private Long speed;

public String getGroupName() {
return groupName;
}

public void setGroupName(String groupName) {
this.groupName = groupName;
}

public String getVehicleId() {
return vehicleId;
}

public void setVehicleId(String vehicleId) {
this.vehicleId = vehicleId;
}

public Long getSpeed() {
return speed;
}

public void setSpeed(Long speed) {
this.speed = speed;
}
}

我的问题是,在合并时,我得到了

Caused by: java.lang.IllegalStateException: Expected BEGIN_ARRAY but was BEGIN_OBJECT at line 2 column 14 path $.root.item

如果我能得到下面的第二个 json,代码就可以正常工作。

{"root": {
"item": [
{
"groupName": "Al Karama Fire Station",
"vehicleId": 222,
"speed": 1
}
],
"rowCount": 1
}}

请提出建议。

解析Json的代码

Gson gson = new Gson();
ParentDTO updatedloginDto2 = gson.fromJson(tmp1, ParentDTO .class);

最佳答案

您必须创建两个根 DTO - 一个用于具有子列表的根,一个用于具有单个子的根,并且在解码 JSON 后将“单个子”元素添加到具有子列表的根。

编辑:

public class RootSingleChildDTO {
private ItemDTO item;
private Integer rowCount;

public ItemDTO getItem() {
return item;
}
public void setItem(ItemDTO item) {
this.item = item;
}
public Integer getRowCount() {
return rowCount;
}
public void setRowCount(Integer rowCount) {
this.rowCount = rowCount;
}
}

关于java - 合并 Json 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31556612/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com