gpt4 book ai didi

java - 使用 Gson 解析 JSON(或 java 的替代方案)

转载 作者:行者123 更新时间:2023-11-30 03:27:25 25 4
gpt4 key购买 nike

我使用 Gson 已经有一段时间了,但是这个让我摸不着头脑。这是我从 REST 调用返回的典型 json 响应。请注意,有多个相同类型的嵌套引用。知道如何使用 Gson (或另一个 java 库)解决这个问题,而无需进行字符串操作吗?

我尝试使用注释来声明相同的名称,但最终得到:

@SerializedName("Context")

declares multiple JSON fields named Context

"response": {
"Context": {
"Context": {
"ttContext": [
{
"taskId": "",
"name": "GUID",
"value": "abc123"
}
]
}
},
"Data": {
"Data": {
"ttData": [
{
"name": "Bob Brown",
"address": "101 Anywhere St",
"city": "Spruce Pine",
"state": "AL",
"zipcd" : 12345
}
]
}
}
}

最佳答案

下面我所做的是创建一个可以通过构造函数包含自身的 Java 类。

我实际上创建了一个 JUnit 测试。我还放置了所有的 getter/setter,因此对于这个论坛来说可能不必要地太长。抱歉。

import com.google.gson.Gson;
import org.junit.Test;

import java.util.ArrayList;
import java.util.List;

public class TestThrowaway {

public class Container {
Response response;

public Container() {
}

public Response getResponse() {
return response;
}

public void setResponse(Response response) {
this.response = response;
}
}

public class Response {
private Context Context;
private Data Data;

public Response() {
}

public TestThrowaway.Context getContext() {
return Context;
}

public void setContext(TestThrowaway.Context context) {
Context = context;
}

public TestThrowaway.Data getData() {
return Data;
}

public void setData(TestThrowaway.Data data) {
Data = data;
}
}

public class Context {
private Context Context;
private List<TtContext> ttContext;

public Context() {}
public Context(Context context) {
this.Context = context;
}

public TestThrowaway.Context getContext() {
return Context;
}

public void setContext(TestThrowaway.Context context) {
Context = context;
}

public List<TtContext> getTtContext() {
return ttContext;
}

public void setTtContext(List<TtContext> ttContext) {
this.ttContext = ttContext;
}
}

public class TtContext {
private String taskId;
private String name;
private String value;

public TtContext(String taskId, String name, String value) {
this.taskId = taskId;
this.name = name;
this.value = value;
}

public TtContext() {
}

public String getTaskId() {
return taskId;
}

public void setTaskId(String taskId) {
this.taskId = taskId;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getValue() {
return value;
}

public void setValue(String value) {
this.value = value;
}
}

public class Data {
private Data Data;
private List<TtData> ttData;

public Data() {
}

public Data(TestThrowaway.Data data) {
Data = data;
}

public TestThrowaway.Data getData() {
return Data;
}

public void setData(TestThrowaway.Data data) {
Data = data;
}

public void setTtData(List<TtData> ttData) {
this.ttData = ttData;
}

}

public class TtData {
private String name;
private String address;
private String city;
private String state;
private Integer zipcd;

public TtData() {
}

public TtData(String name, String address, String city, String state, Integer zipcd) {
this.name = name;
this.address = address;
this.city = city;
this.state = state;
this.zipcd = zipcd;
}

public String getName() {
return name;
}

public void setName(String name) {
this.name = name;
}

public String getAddress() {
return address;
}

public void setAddress(String address) {
this.address = address;
}

public String getCity() {
return city;
}

public void setCity(String city) {
this.city = city;
}

public String getState() {
return state;
}

public void setState(String state) {
this.state = state;
}

public Integer getZipcd() {
return zipcd;
}

public void setZipcd(Integer zipcd) {
this.zipcd = zipcd;
}
}

@Test
public void test() {
// Create inner Context object
Context innerContext = new Context();

// Create your ttContext list. For ease, I created a constructor that takes in all of your values
List<TtContext> ttContexts = new ArrayList<>();
ttContexts.add(new TtContext("", "GUID", "abc123"));

// Add your list to your inner Context
innerContext.setTtContext(ttContexts);

// Create a new Context object that takes in a Context object, the inner Context object
Context outsideContext = new Context(innerContext);

// Create inner Data object
Data innerData = new Data();

// Create your ttData list.
List<TtData> ttDatas = new ArrayList<>();
ttDatas.add(new TtData("Bob Brown", "101 Anywhere St", "Spruce Pine", "AL", 12345));

// Add your list to your inner Data
innerData.setTtData(ttDatas);

// Create a new Data object that takes in a Data object, the inner Data object
Data outsideData = new Data(innerData);

// Create a Response object that will set both the outsideContext object and the outsideData object
Response response = new Response();
response.setContext(outsideContext);
response.setData(outsideData);

// If you leave like this and run Gson, you won't have the wrapping "response" object.
// I like to create a Container object that takes in the Response object so I can create a variable
// called response and Gson does everything for me.

Container container = new Container();
container.setResponse(response);

// Instantiate Gson and run the method toJson.
Gson gson = new Gson();
String s = gson.toJson(container);
System.out.println(s);
}
}

测试结果为:

{
"response": {
"Context": {
"Context": {
"ttContext": [
{
"taskId": "",
"name": "GUID",
"value": "abc123"
}
]
}
},
"Data": {
"Data": {
"ttData": [
{
"name": "Bob Brown",
"address": "101 Anywhere St",
"city": "Spruce Pine",
"state": "AL",
"zipcd": 12345
}
]
}
}
}
}

关于java - 使用 Gson 解析 JSON(或 java 的替代方案),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29854657/

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