Làm thế nào để chuyển đổi một chuỗi thành JsonObject bằng thư viện gson


91

Xin hãy tư vấn cách chuyển đổi một thư viện Stringđể JsonObjectsử dụng gson.

Những gì tôi làm không thành công:

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

Câu trả lời:


28

Bạn không cần phải sử dụng JsonObject. Bạn nên sử dụng Gson để chuyển đổi sang / từ chuỗi JSON và các đối tượng Java của riêng bạn.

Xem Hướng dẫn sử dụng Gson :

(Serialization)

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]

(Hủy đăng ký)

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
Nhưng tôi cần sử dụng JsonObject.
Eugene

3
bởi vì một phương thức của lớp tôi sẽ trả về JsonObject.
Eugene

3
@Android: ... tại sao? JsonObjectlà một biểu diễn trung gian. Trong 99% các trường hợp sử dụng, bạn thực sự chỉ nên quan tâm đến việc biểu diễn dữ liệu của mình dưới dạng một đối tượng Java hoặc dưới dạng một chuỗi có chứa JSON.
Matt Ball

95
Bạn không trả lời câu hỏi :) Tất nhiên có những trường hợp bạn thực sự cần chuyển đổi một Chuỗi thành một JsonObject.
Olof Larsson

3
@MattBall Trong thư viện Ion http ( github.com/koush/ion ) có một chức năng để đặt phần thân của một yêu cầu http thành một JsonObject.
Gagege

169

Bạn có thể chuyển đổi nó thành JavaBean nếu bạn muốn sử dụng:

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

Để sử dụng JsonObject, linh hoạt hơn, hãy sử dụng như sau:

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());

Tương đương với những điều sau:

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

"Khẳng định" là những nội dung bổ sung, dành cho mục đích thử nghiệm.
Paresh Mayani

9
Câu trả lời này thực sự trả lời câu hỏi như đã hỏi.
Janik Zikovsky

5
jsonParser.parse (json) .getAsJsonObject ();
Mike

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

44

Để làm điều đó một cách đơn giản hơn, hãy xem xét bên dưới:

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

3
Bạn có thể nên lưu ý rằng điều này trước đây đã được đăng dưới dạng nhận xét về một câu trả lời khác.
Nathan Tuggy

3
Xin lỗi nhưng không có định dạng mã .. nhận xét đó không được chú trọng .. và câu trả lời này thực sự là câu trả lời tốt hơn những câu khác
Ankit Bansal

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

Tôi làm điều này, và nó đã hoạt động.


8

Có vẻ như câu trả lời trên đã không trả lời câu hỏi hoàn toàn.

Tôi nghĩ rằng bạn đang tìm kiếm một cái gì đó như dưới đây:

class TransactionResponse {

   String Success, Message;
   List<Response> Response;

}

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

trong đó câu trả lời của tôi là như thế này:

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

Như bạn có thể thấy, tên biến phải giống như biểu diễn chuỗi Json của khóa trong cặp giá trị khóa. Điều này sẽ tự động chuyển đổi chuỗi gson của bạn thành JsonObject.


1
Tại sao bạn sử dụng chữ hoa trên các biến thành viên? Tại sao bạn sử dụng công cụ sửa đổi quyền truy cập mặc định? Nếu bạn muốn viết hoa trong câu trả lời thì hãy sử dụng @SerializedName("Success")ví dụ đó.
Simon Zettervall,

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");

1

Lưu ý rằng kể từ Gson 2.8.6 , phương thức JsonParser.parsethể hiện đã không được chấp nhận và được thay thế bằng phương thức tĩnh JsonParser.parseString:

JsonObject jsonObject = JsonParser.parseString(json).getAsJsonObject();
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.