gpt4 book ai didi

java - 如何在java中对分层json进行建模

转载 作者:行者123 更新时间:2023-12-02 09:45:15 25 4
gpt4 key购买 nike

我是一名前端开发人员,对后端开发是全新的。我的任务是在 Java 对象中对 json 进行建模。现在我的 Controller 返回的只是一些模拟数据。

{
"data":{
"objectId":25,
"columnName":[
"myCategory",
"myCategoryId"
],
"columnValues":[
[
"Category One",
1
],
[
"Category Two",
2
],
[
"Category Three",
3
],
[
"Category Four",
4
],
[
"Category Five",
5
]
]
}
}

这是我的尝试。 Controller 正确返回此 json。但这是不是太简单了?我认为应该做的是将 columnNamecolumnValues 数组外推到单独的类中,但我不确定如何进行。

package com.category;

import java.util.List;

public class MyObjectData {
private int objectId;
private List columnName;
private List columnValues;

public int getObjectId() {
return objectId;
}
public void setObjectId(int objectId) {
this.objectId = objectId;
}

public List getColumnName() {
return columnName;
}

public void setColumnName(List colName) {
this.columnName = colName;
}

public List getColumnValues() {
return columnValues;
}

public void setValues(List values) {
this.columnValues = values;
}

}

关于columnNamescolumnValues,我觉得我应该在模型中做这样的事情:

private List<ColumnNames> columnNames;
private List<ColumnValues> columnValues;

public List<ColumnNames> getColumnNames() {
return columnNames;
}

public void setColumnNames(List<ColumnNames> columnNames) {
this.columnNames = columnNames;
}

public List<ColumnValues> getColumnValues() {
return columnValues;
}

public void setColumnValues(List<ColumnValues> columnValues) {
this.columnValues = columnValues;
}

然后我会为它们创建两个单独的类,如下所示:

package com.category;

import java.util.List;

public class ColumnName {

private String columnName;

public String getColumnName() {
return columnName;
}

public void setColumnName(String columnName) {
this.columnName = columnName;
}

}

package com.category;

import java.util.List;

public class ColumnValue {

private String columnValue;
private int columnValueId;

public String getColumnValue() {
return columnValue;
}

public void setColumnValue(String columnValue) {
this.columnValue = columnValue;
}

public String getColumnValueId() {
return columnValueId;
}

public void setColumnValueId(int columnValueId) {
this.columnValueId = columnValueId;
}

}

我觉得我拥有所有正确的部分,但只是不确定这是否是比我最初的尝试更好的方法......这有效。只是寻找输入。提前致谢。

最佳答案

在您的结构中,columnValues 实际上是表格中包含两列的行:myCategorymyCategoryId

一个更加“面向对象”的 Java 类可能是这样的:

public class MyObjectData {

private int objectId;

private List<MyObjectRow> columnValues; // I would have named this as rows

}

public class MyObjectRow {

private String myCategory;

private String myCategoryId;

}

现在您需要一个自定义序列化器将其转换为您期望的 JSON 结构:

public class MyObjectDataSerializer extends StdSerializer<MyObjectData> {

public MyObjectDataSerializer() {
super(MyObjectData.class);
}

public void serialize(MyObjectData value, JsonGenerator generator, SerializerProvider provider) throws IOException {
generator.writeStartObject();
generator.writeNumberField("objectId", value.getObjectId());

generator.writeArrayFieldStart("columnName");
generator.writeString("myCategory");
generator.writeString("myCategoryId");
generator.writeEndArray();

generator.writeArrayFieldStart("columnValues");
for (MyObjectRow row : value.getColumnValues()) {
generator.writeStartArray();
generator.writeString(row.getMyCategory());
generator.writeNumber(row.getMyCategoryId());
generator.writeEndArray();
}
generator.writeEndArray();


generator.writeEndObject();
}
}

注意:您可以使用反射来动态提取字段名称和值。

然后您可以将 MyObjectData 对象序列化为您期望的形式:

public class MyObjectDataSerializerTest {

@Test
public void shouldCustomSerializeMyObjectData() throws Exception {
ObjectMapper mapper = new ObjectMapper();

SimpleModule module = new SimpleModule();
module.addSerializer(MyObjectData.class, new MyObjectDataSerializer());
mapper.registerModule(module);

MyObjectData myObjectData = new MyObjectData();
myObjectData.setObjectId(25);
myObjectData.setColumnValues(Arrays.asList(
new MyObjectRow("Category One", 1),
new MyObjectRow("Category Two", 2),
new MyObjectRow("Category Three", 3)
));


String serialized = mapper.writeValueAsString(myObjectData);

assertThat(serialized, equalTo("{\"objectId\":25,\"columnName\":[\"myCategory\",\"myCategoryId\"],\"columnValues\":[[\"Category One\",1],[\"Category Two\",2],[\"Category Three\",3]]}\n"));
}

}

关于java - 如何在java中对分层json进行建模,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56711581/

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