我想用一个REST API发布一个post请求。 因此,我创建了一个JSONObject并将一个类生成的JSON字符串放入其中。
JSONObject jsonObject = new JSONObject();
String json = gson.toJson(MyClazz);
try {
jsonObject.put(PARAM, json);
}
catch (JSONException e1) {
e1.printStackTrace();
}
问题是正确计算的JSON字符串会被转义,并且无法在后端识别。
所以toJson()
给出了类似的内容:
{
"device_identifier":"324234234",
"name":"NameMe",
"list":[
{"prop":"A","prop2":-10},
{"prop":"B","prop2":-12}
]
}
jsonObject的输出类似于
{
"PARAM":{
\"device_identifier\":\"324234234\",
\"name\":\"NameMe\",
\"list\":[
{\"prop\":\"A\",\"prop2\":-10},
{\"prop\":\"B\","\prop2\":-12}
]
}
}
我需要用于JSON结构的PARAM,所以我不能直接将它提供给REST-API。我有什么想法可以避免额外的逃避?
答案 0 :(得分:0)
您可以使用简单的包装器对象包装MyClazz
对象,然后将该包装对象传递给Gson的toJson
方法。
根据您的示例JSON给出此类,
public class MyClazz {
public String device_identifier;
public String name;
public List<Prop> list;
public class Prop {
public String prop;
public Integer prop2;
}
}
这是一个可能的包装器实现。请注意使用com.google.gson.annotations.SerializedName
告诉Gson在JSON表示中使用PARAM
键。
public class MyClazzWrapper {
public MyClazzWrapper(MyClazz myClazz) {
this.myClazz = myClazz;
}
@SerializedName("PARAM")
private MyClazz myClazz;
}
这是一个使用它的例子:
Gson gson = new GsonBuilder().setPrettyPrinting().create();
MyClazz myClazz = gson.fromJson("{\"device_identifier\":\"324234234\",\"name\":\"NameMe\",\"list\":[{\"prop\":\"A\",\"prop2\":-10},{\"prop\":\"B\",\"prop2\":-12}]}", MyClazz.class);
MyClazzWrapper wrapped = new MyClazzWrapper(myClazz);
System.out.println(gson.toJson(wrapped));
以上将打印:
{
"PARAM": {
"device_identifier": "324234234",
"name": "NameMe",
"list": [
{
"prop": "A",
"prop2": -10
},
{
"prop": "B",
"prop2": -12
}
]
}
}