gpt4 book ai didi

java - 将 json 转换为对象列表

转载 作者:搜寻专家 更新时间:2023-11-01 02:38:37 26 4
gpt4 key购买 nike

我有以下字符串:

String json = "[{\"id\": \"0\", \"ip\": \"123\", \"mac\": \"456\"}, {\"id\": \"1\", \"ip\": \"111\", \"mac\": \"222\"}]";

还有一个 SlaveEntity 实体,它有:

public class SlaveEntity extends BaseEntity {

private String ip;
private String macAddress;
private String status;

@OneToMany(mappedBy="slave", targetEntity = PositionEntity.class, fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private List<PositionEntity> positions;

}

我正在编写一个获取 json 并返回 SlaveEntity 列表的方法:

public static List<SlaveEntity> JsonToSlaveEntity(String json) {
ObjectMapper objectMapper = new ObjectMapper();
List<SlaveEntity> obj = new ArrayList<SlaveEntity>();

try {
obj = objectMapper.readValue(json, List.class);

} catch (IOException e) {
e.printStackTrace();
}
return obj;
}

问题是 obj 列表的结果是这样的:

enter image description here

但是我需要的对象列表是这样的:

enter image description here

那么我怎样才能得到需要的列表呢?

最佳答案

您可以将结果转换为对象列表,也可以传入类型参数而不是 List 类。

String jsonString = "[{\"id\": \"0\", \"ip\": \"123\", \"mac\": \"456\"}, {\"id\": \"1\", \"ip\": \"111\", \"mac\": \"222\"}]";

使用对象

List<Object> items = objectMapper.readValue(
jsonString,
objectMapper.getTypeFactory().constructParametricType(List.class, Object.class)
);

使用SlaveEntity

List<SlaveEntity> items = objectMapper.readValue(
jsonString,
objectMapper.getTypeFactory().constructCollectionType(List.class, SlaveEntity.class)
);

更新

这是我想出的,而且有效。

实体测试

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import com.fasterxml.jackson.databind.ObjectMapper;

public class EntityTest {
public static void main(String[] args) {
String json = "[{\"id\": \"0\", \"ip\": \"123\", \"mac\": \"456\"}, {\"id\": \"1\", \"ip\": \"111\", \"mac\": \"222\"}]";

for (SlaveEntity entity : jsonToSlaveEntity(json)) {
System.out.println(entity);
}
}

public static List<SlaveEntity> jsonToSlaveEntity(String json) {
ObjectMapper objectMapper = new ObjectMapper();

try {
return objectMapper.readValue(
json,
objectMapper.getTypeFactory().constructCollectionType(List.class, SlaveEntity.class)
);

} catch (IOException e) {
e.printStackTrace();
}
return new ArrayList<SlaveEntity>();
}
}

基础实体

public class BaseEntity {
private long id;

public long getId() {
return id;
}

public void setId(long id) {
this.id = id;
}
}

从属实体

import java.util.List;

import javax.persistence.CascadeType;
import javax.persistence.FetchType;
import javax.persistence.OneToMany;

import com.fasterxml.jackson.annotation.JsonProperty;

public class SlaveEntity extends BaseEntity {
private String ip;

@JsonProperty("mac")
private String macAddress;

private String status;

@OneToMany(mappedBy = "slave", targetEntity = PositionEntity.class, fetch = FetchType.EAGER, cascade = CascadeType.ALL)
private List<PositionEntity> positions;

public String getIp() {
return ip;
}

public void setIp(String ip) {
this.ip = ip;
}

public String getMacAddress() {
return macAddress;
}

public void setMacAddress(String macAddress) {
this.macAddress = macAddress;
}

public String getStatus() {
return status;
}

public void setStatus(String status) {
this.status = status;
}

public List<PositionEntity> getPositions() {
return positions;
}

public void setPositions(List<PositionEntity> positions) {
this.positions = positions;
}

@Override
public String toString() {
return String.format(
"SlaveEntity [id=%d, ip=%s, mac=%s, status=%s, positions=%s]",
getId(), ip, macAddress, status, positions);
}
}

位置实体

public class PositionEntity {
// ?
}

结果

SlaveEntity [id=0, ip=123, mac=456, status=null, positions=null]
SlaveEntity [id=1, ip=111, mac=222, status=null, positions=null]

关于java - 将 json 转换为对象列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39999420/

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