以下代码不起作用。无法将JSON转换为JAVA对象。 怎么解决?感谢。
import com.google.gson.Gson;
public class Rest{
public static void main(String[] args) {
String json = "{'CBE_GetNewSessionResponse': {'CBE_GetNewSessionResult': '10016-300-0000022151'}}";
Gson gson = new Gson();
Data data = gson.fromJson(json, Data.class);
System.out.println(data.getResponse());
}
}
class Data {
private CBE_GetNewSessionResponse response;
public CBE_GetNewSessionResponse getResponse() {
return response;
}
public void setResponse(CBE_GetNewSessionResponse response) {
this.response = response;
}
class CBE_GetNewSessionResponse{
private String CBE_GetNewSessionResult;
public String getCBE_GetNewSessionResult() {
return CBE_GetNewSessionResult;
}
public void setCBE_GetNewSessionResult(String cBE_GetNewSessionResult) {
CBE_GetNewSessionResult = cBE_GetNewSessionResult;
}
}
}
答案 0 :(得分:1)
使用字段与getter来表示Json元素
一些Json库使用类型的getter来推导出Json 元素。 我们选择使用所有字段(在继承层次结构中) 不是瞬态的,静态的或合成的。我们这样做是因为没有 所有课程都使用适当命名的getter编写。而且,getXXX 或isXXX可能是语义而不是指示属性。
换句话说,您的字段需要按照JSON中的显示进行命名,反之亦然。
private CBE_GetNewSessionResponse CBE_GetNewSessionResponse;
然后它会将您的JSON正确映射到您的对象结构。
答案 1 :(得分:0)
您在数据response
中命名了字段,而在JSon中将其命名为CBE_GetNewSessionResponse
。也许这样尝试
public class Rest{
public static void main(String[] args) {
String json = "{'CBE_GetNewSessionResponse': {" +
"'CBE_GetNewSessionResult': '10016-300-0000022151'}" +
"}";
Gson gson = new Gson();
Data data = gson.fromJson(json, Data.class);
System.out.println(data.getCBE_GetNewSessionResponse().getCBE_GetNewSessionResult());
}
}
class Data {
private CBE_GetNewSessionResponse CBE_GetNewSessionResponse;
public CBE_GetNewSessionResponse getResponse() {
return CBE_GetNewSessionResponse;
}
public void setResponse(CBE_GetNewSessionResponse response) {
this.CBE_GetNewSessionResponse = response;
}
class CBE_GetNewSessionResponse{
private String CBE_GetNewSessionResult;
public String getCBE_GetNewSessionResult() {
return CBE_GetNewSessionResult;
}
public void setCBE_GetNewSessionResult(String cBE_GetNewSessionResult) {
CBE_GetNewSessionResult = cBE_GetNewSessionResult;
}
}
}
如果您想在Data
类字段和JSon键中使用不同的名称,则需要实现自己的FieldNamingStrategy
class MyNameStrategy implements FieldNamingStrategy {
@Override
public String translateName(Field f) {
if (f.getName().equals("response")) {
return "CBE_GetNewSessionResponse";
} else {
return f.getName();
}
}
}
并在创建Gson
对象
Gson gson = new GsonBuilder().setFieldNamingStrategy(new MyNameStrategy()).create();