我正在尝试用Java手动创建一个Json结构。最后,我需要一个我的Json对象的字符串表示。由于我的项目已经依赖于GSON,我想使用它。但经过几个小时的尝试和谷歌搜索,我想,我完全误解了一些事情。
目前,我有以下(非工作)代码:
JsonObject user_auth = new JsonObject();
user_auth.addProperty("user_name", username);
user_auth.addProperty("password", password);
JsonObject rest_data = new JsonObject();
Gson gson = new Gson();
rest_data.addProperty("user_auth", gson.toJson(user_auth));
rest_data.addProperty("application", APPLICATION_NAME);
String payload = gson.toJson(rest_data);
我面临的问题是“user_auth”元素获得转义引号(\“而不是”当它被添加到外部元素时。如何防止这种情况? 我也尝试过使用
rest_data.addProperty("user_auth", user_auth.toString());
但这确实是一样的。
此致
答案 0 :(得分:10)
手动编写JSON不是一个好的解决方案。
您似乎对user_auth进行了两次编码。
请改为尝试:
JsonObject user_auth = new JsonObject();
user_auth.addProperty("user_name", username);
user_auth.addProperty("password", password);
JsonObject rest_data = new JsonObject();
rest_data.addProperty("user_auth", user_auth);
rest_data.addProperty("application", APPLICATION_NAME);
Gson gson = new Gson();
String payload = gson.toJson(rest_data);
答案 1 :(得分:0)
对user_auth使用addProperty(),然后对rest_data使用有效负载。
String payloadJSON = gson.toJson(rest_data);
答案 2 :(得分:0)
另一种方法是直接将POJO转换为JSON。
<强> 1。创建POJO对象
即。用户类:
class User {
@JsonProperty("user_name") // this annotation helps you to specify
// property name in result json
private String userName;
@JsonProperty("first_name")
private String firstName;
// ...
// getters and setters here, hashcode, equals, etc.
}
<强> 2。将POJO转换为JSON字符串
例如:
User user = new User("superlogin", "superpass", ...);
String jsonString = new Gson().toJson(user);
多数民众赞成:)
我认为这比手动构建json结构更方便。
答案 3 :(得分:-2)
如果您不想添加外部jar,请尝试使用
返回“{UPLOAD:”+ upload +“,UPLOADSTATUS:”+ perUpload +“,TRANSCODE:”+ transcode +“,TRANSCODESTATUS:”+ transcodestatus +“}”;