gpt4 book ai didi

json - GSON反序列化问题

转载 作者:行者123 更新时间:2023-12-04 19:55:02 26 4
gpt4 key购买 nike

我在使用 GSON 库时遇到了反序列化问题。

以下是我尝试反序列化的 JSON 代码

{"response": {
"@service": "CreateUser",
"@response-code": "100",
"@timestamp": "2010-11-27T15:52:43-08:00",
"@version": "1.0",
"error-message": "",
"responseData": {
"user-guid": "023804207971199"
}
}}

我创建了以下类
public class GsonContainer {

private GsonResponse mResponse;

public GsonContainer() { }

//get & set methods

}

public class GsonResponse {

private String mService;
private String mResponseCode;
private String mTimeStamp;
private String mVersion;
private String mErrorMessage;

private GsonResponseCreateUser mResponseData;

public GsonResponse(){

}

//gets and sets method
}

public class GsonResponseCreateUser {

private String mUserGuid;

public GsonResponseCreateUser(){

}

//get and set methods
}

调用 GSON 库后,数据为空。任何想法类有什么问题?

提前感谢您的帮助......我认为这是微不足道的......

最佳答案

@user523392 说:

the member variables have to match exactly what is given in the JSON response



不是这种情况。

有几个选项可用于指定 Java 字段名称如何映射到 JSON 元素名称。

适用于上述原始问题中的案例的一种解决方案是使用 @SerializedName 注释 Java 类成员。非常明确地声明它映射到的 JSON 元素名称。
// output: [MyObject: element=value1, elementTwo=value2]

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.annotations.SerializedName;

public class Foo
{
static String jsonInput =
"{" +
"\"element\":\"value1\"," +
"\"@element-two\":\"value2\"" +
"}";

public static void main(String[] args)
{
GsonBuilder gsonBuilder = new GsonBuilder();
Gson gson = gsonBuilder.create();
MyObject object = gson.fromJson(jsonInput, MyObject.class);
System.out.println(object);
}
}

class MyObject
{
String element;

@SerializedName("@element-two")
String elementTwo;

@Override
public String toString()
{
return String.format(
"[MyObject: element=%s, elementTwo=%s]",
element, elementTwo);
}
}

另一种方法是创建自定义 FieldNamingStrategy指定如何将 Java 成员名称转换为 JSON 元素名称。此示例将对所有 Java 成员名称应用相同的名称映射。这种方法不适用于上面的原始示例,因为并非所有 JSON 元素名称都遵循相同的命名模式——它们并非都以“@”开头,并且有些使用驼峰命名法而不是用“-”分隔名称部分'。此 FieldNamingStrategy 的一个实例将在构建 Gson 时使用实例 ( gsonBuilder.setFieldNamingStrategy(new MyFieldNamingStrategy()); )。
class MyFieldNamingStrategy implements FieldNamingStrategy
{
// Translates the field name into its JSON field name representation.
@Override
public String translateName(Field field)
{
String name = field.getName();
StringBuilder translation = new StringBuilder();
translation.append('@');
for (int i = 0, length = name.length(); i < length; i++)
{
char c = name.charAt(i);
if (Character.isUpperCase(c))
{
translation.append('-');
c = Character.toLowerCase(c);
}
translation.append(c);
}
return translation.toString();
}
}

另一种管理 Java 字段名称如何映射到 JSON 元素名称的方法是指定 FieldNamingPolicy构建 Gson 时例如, gsonBuilder.setFieldNamingPolicy(FieldNamingPolicy.LOWER_CASE_WITH_DASHES); .然而,这也不适用于原始示例,因为它对所有情况应用相同的名称映射策略。

关于json - GSON反序列化问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4300799/

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