วิธีการแปลงสตริงเป็น JsonObject โดยใช้ไลบรารี gson


93

โปรดให้คำแนะนำวิธีการแปลงStringการJsonObjectใช้gsonห้องสมุด

สิ่งที่ฉันทำอย่างไม่ประสบความสำเร็จ:

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

คำตอบ:


29

JsonObjectคุณไม่จำเป็นต้องใช้ คุณควรใช้ Gson เพื่อแปลงเป็น / จากสตริง JSON และวัตถุ Java ของคุณเอง

ดูคู่มือผู้ใช้ 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]

(Deserialization)

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)

38
แต่ฉันต้องใช้ JsonObject
Eugene

3
เพราะเมธอดของคลาสของฉันควรส่งคืน JsonObject
Eugene

3
@Android: ... ทำไม? JsonObjectเป็นตัวแทนระดับกลาง ใน 99% ของกรณีการใช้งานคุณควรสนใจเฉพาะการแสดงข้อมูลของคุณเป็นวัตถุ Java หรือเป็นสตริงที่มี JSON
Matt Ball

95
คุณไม่ได้ตอบคำถาม :) มีหลายกรณีที่คุณต้องแปลง String เป็น JsonObject
Olof Larsson

3
@MattBall ในไลบรารี Ion http ( github.com/koush/ion ) มีฟังก์ชันในการตั้งค่าเนื้อหาของคำขอ http เป็น JsonObject
Gagege

173

คุณสามารถแปลงเป็น 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

9
คำตอบนี้ตอบโจทย์ได้จริงตามที่ถาม
Janik Zikovsky

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

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

46

หากต้องการทำวิธีที่ง่ายกว่านั้นให้พิจารณาด้านล่าง:

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

3
คุณควรทราบว่าก่อนหน้านี้โพสต์เป็นความคิดเห็นในคำตอบอื่น
Nathan Tuggy

3
ขออภัย แต่ไม่มีรูปแบบรหัส .. ความคิดเห็นนั้นไม่ได้โฟกัส .. และอันนี้เป็นคำตอบที่ดีกว่าคนอื่นจริงๆ
Ankit Bansal

31
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")ตัวอย่างแทน
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);



โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.