如何使用gson库将字符串转换为JsonObject


91

请建议如何将使用库转换StringJsonObject使用gson库。

我未成功执行的操作:

String string = "abcde";
Gson gson = new Gson();
JsonObject json = new JsonObject();
json = gson.toJson(string); // Can't convert String to JsonObject

Answers:


30

您无需使用JsonObject。您应该使用Gson在JSON字符串和您自己的Java对象之间进行转换。

请参阅《Gson用户指南》

(序列化)

Gson gson = new Gson();
gson.toJson(1);                   // prints 1
gson.toJson("abcd");              // prints "abcd"
gson.toJson(new Long(10));        // prints 10
int[] values = { 1 };
gson.toJson(values);              // prints [1]

(反序列化)

int one = gson.fromJson("1", int.class);
Integer one = gson.fromJson("1", Integer.class);
Long one = gson.fromJson("1", Long.class);
Boolean false = gson.fromJson("false", Boolean.class);
String str = gson.fromJson("\"abc\"", String.class);
String anotherStr = gson.fromJson("[\"abc\"]", String.class)

36
但是我需要使用JsonObject。
尤金(Eugene)

3
因为我类的方法应该返回JsonObject。
尤金(Eugene)

3
@Android:...为什么?JsonObject是中间表示。在99%的用例中,您实际上应该只关心将数据表示为Java对象还是包含JSON的字符串。
马特·鲍尔,

93
您不会回答这个问题:)当然,在某些情况下,您实际上需要将String转换为JsonObject。
Olof Larsson

3
@MattBall在Ion http库(github.com/koush/ion)中,有一个函数可以将对JsonObject的http请求的正文设置。
Gagege

169

您可以使用以下方法将其转换为JavaBean:

 Gson gson = new GsonBuilder().setPrettyPrinting().create();
 gson.fromJson(jsonString, JavaBean.class)

要使用更灵活的JsonObject,请使用以下命令:

String json = "{\"Success\":true,\"Message\":\"Invalid access token.\"}";
JsonParser jsonParser = new JsonParser();
JsonObject jo = (JsonObject)jsonParser.parse(json);
Assert.assertNotNull(jo);
Assert.assertTrue(jo.get("Success").getAsString());

等效于以下内容:

JsonElement jelem = gson.fromJson(json, JsonElement.class);
JsonObject jobj = jelem.getAsJsonObject();

“ Assert”是多余的东西,用于测试目的。
Paresh Mayani 2014年

9
该答案实际上回答了所问的问题。
Janik Zikovsky 2014年

5
jsonParser.parse(json).getAsJsonObject();
迈克

JsonObject jo = jsonParser.parse(json).getAsJsonObject();Assert.assertTrue(jo.get("Success").getAsBoolean());
smac89 '18

44

要以更简单的方式进行操作,请考虑以下内容:

JsonObject jsonObject = (new JsonParser()).parse(json).getAsJsonObject();

3
您可能应该注意,此内容以前是作为对其他答案的评论发布的。
内森·塔吉

3
很抱歉,但没有编码格式..这评论是失焦的..而这一次实际上是比别人更好的答案
ANKIT邦萨尔

27
String string = "abcde"; // The String which Need To Be Converted
JsonObject convertedObject = new Gson().fromJson(string, JsonObject.class);

我做到了,它奏效了。


8

看起来上面的答案没有完全回答问题。

我认为您正在寻找以下内容:

class TransactionResponse {

   String Success, Message;
   List<Response> Response;

}

TransactionResponse = new Gson().fromJson(response, TransactionResponse.class);

我的回应是这样的:

{"Success":false,"Message":"Invalid access token.","Response":null}

如您所见,变量名称应与键值对中键的Json字符串表示形式相同。这将自动将您的gson字符串转换为JsonObject。


1
为什么在成员变量上使用大写字母?为什么使用默认访问修饰符?如果要在响应中使用大写字母,请改用@SerializedName("Success")例如。
西蒙·泽特瓦尔

7
String emailData = {"to": "abc@abctest.com","subject":"User details","body": "The user has completed his training"
}

// Java model class
public class EmailData {
    public String to;
    public String subject;
    public String body;
}

//Final Data
Gson gson = new Gson();  
EmailData emaildata = gson.fromJson(emailData, EmailData.class);

4
Gson gson = new Gson();
YourClass yourClassObject = new YourClass();
String jsonString = gson.toJson(yourClassObject);

3
JsonObject jsonObject = (JsonObject) new JsonParser().parse("YourJsonString");

0

请注意,自Gson 2.8.6起,实例方法JsonParser.parse已被弃用,并由静态方法代替JsonParser.parseString

JsonObject jsonObject = JsonParser.parseString(json).getAsJsonObject();
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.