手动创建Json字符串

时间:2014-01-03 13:04:23

标签: java json gson

我正在尝试用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());

但这确实是一样的。

此致

4 个答案:

答案 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 +“}”;