我正在使用 Gson 将对象转换为 json 字符串,它工作正常,但是当我使用 post 将该 json 发送到 web 服务方法时,我必须在字符串中添加 post 方法的参数名称。
示例:
jsonString 我从 Gson new Gson().toJson(requestDataDTO)
获得:
{
"req": {
"AppId": "2",
"ThirdParty": "3",
"UserId": "1",
"UserToken": "4"
},
"req1": {
"AppId": "-33",
"ThirdParty": "3",
"UserId": "1",
"UserToken": "4"
}
}
我想要 jsonString :
{
"requestDataDTO": {
"req": {
"AppId": "2",
"ThirdParty": "3",
"UserId": "1",
"UserToken": "4"
},
"req1": {
"AppId": "-33",
"ThirdParty": "3",
"UserId": "1",
"UserToken": "4"
}
}
}
现在,我在从 Gson 获得的 json 字符串的开头添加了这个 "requestDataDTO"
字符串。
有办法实现这一点吗?
最佳答案
假设你有一个看起来像这样的对象:
package com.dominikangerer.q25077756;
import com.google.gson.annotations.SerializedName;
public class RequestDataDTO {
// {"AppId":"2","ThirdParty":"3","UserId":"1","UserToken":"4"}
@SerializedName("AppId")
private String appId;
@SerializedName("ThirdParty")
private String thirdParty;
@SerializedName("UserId")
private String userId;
@SerializedName("UserToken")
private String userToken;
public String getAppId() {
return appId;
}
public void setAppId(String appId) {
this.appId = appId;
}
public String getThirdParty() {
return thirdParty;
}
public void setThirdParty(String thirdParty) {
this.thirdParty = thirdParty;
}
public String getUserId() {
return userId;
}
public void setUserId(String userId) {
this.userId = userId;
}
public String getUserToken() {
return userToken;
}
public void setUserToken(String userToken) {
this.userToken = userToken;
}
}
最简单、对我来说也是最易读的解决方案是创建一个包含 HashMap(键/值)的包装器/容器类,如下所示:
package com.dominikangerer.q25077756;
import java.util.HashMap;
public class RequestDataDTOContainer {
private HashMap<String, RequestDataDTO> requestDataDTO = new HashMap<String, RequestDataDTO>();
public HashMap<String, RequestDataDTO> getRequestDataDTO() {
return requestDataDTO;
}
public void setRequestDataDTO(HashMap<String, RequestDataDTO> requestDataDTO) {
this.requestDataDTO = requestDataDTO;
}
public void putRequestDataDTO(String key, RequestDataDTO value){
this.requestDataDTO.put(key, value);
}
}
要运行它,只需使用如下所示的 main 来测试它:
// enable pretty printing
Gson gson = new GsonBuilder().setPrettyPrinting().create();
// too lazy to fill the objects by hand
String reqJson = "{\"AppId\":\"2\",\"ThirdParty\":\"3\",\"UserId\":\"1\",\"UserToken\":\"4\"}";
String req1Json = "{\"AppId\":\"-33\",\"ThirdParty\":\"3\",\"UserId\":\"1\",\"UserToken\":\"4\"}";
// deserialize it with gson
RequestDataDTO req = gson.fromJson(reqJson, RequestDataDTO.class);
RequestDataDTO req1 = gson.fromJson(req1Json, RequestDataDTO.class);
// initiliaze the container
RequestDataDTOContainer container = new RequestDataDTOContainer();
// adding the 2 req objects with the certain key
container.putRequestDataDTO("req", req);
container.putRequestDataDTO("req1", req1);
// Print it as pretty json
System.out.println(gson.toJson(container));
如果您想添加更多元信息(例如整个元对象或类似信息)而不向该 json 添加硬编码字符串,您现在可以更加灵活。
您可以在此 github 存储库中找到整个示例:Java Stackoverflow Answers by DominikAngerer
关于java - 带键的 Gson 字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25077756/