Gson kitaplığını kullanarak bir dizeyi JsonObject'e dönüştürme


95

Danışma nasıl bir dönüştürme Lütfen Stringiçin JsonObjectkullanarak gsonkütüphane.

Başarısız bir şekilde yaptığım şey:

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

Yanıtlar:


174

Aşağıdakileri kullanmak istiyorsanız bir JavaBean'a dönüştürebilirsiniz:

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

Daha esnek olan JsonObject'i kullanmak için aşağıdakileri kullanın:

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

Aşağıdakine eşdeğer olan:

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

"İddia etmek" ekstra şeylerdir, test amaçlıdır.
Paresh Mayani

9
Bu cevap aslında soruyu sorulduğu gibi cevaplıyor.
Janik Zikovsky

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

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

46

Bunu daha basit bir şekilde yapmak için aşağıdakileri düşünün:

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

3
Muhtemelen bunun daha önce başka bir cevaba yorum olarak gönderildiğini not etmelisiniz.
Nathan Tuggy

3
Üzgünüm ama kod formatı olmadan .. bu yorum odak dışı .. ve bu aslında diğerlerinden daha iyi cevap
Ankit Bansal,

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

Bunu yapıyorum ve işe yaradı.


29

Kullanmanıza gerek yok JsonObject. JSON dizelerine ve kendi Java nesnelerinize dönüştürmek için Gson kullanıyor olmalısınız.

Gson Kullanıcı Kılavuzuna bakın :

(Serileştirme)

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]

(Seriyi kaldırma)

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
Ancak JsonObject kullanmam gerekiyor.
Eugene

3
çünkü sınıfımın bir yöntemi JsonObject döndürmelidir.
Eugene

3
@Android: ... neden? JsonObjectbir ara temsildir. Kullanım durumlarının% 99'unda, verilerinizi bir Java nesnesi veya JSON içeren bir dize olarak temsil etmeyi gerçekten önemsemelisiniz.
Matt Ball

95
Soruya cevap vermiyorsunuz :) Bir String'i JsonObject'e dönüştürmeniz gereken durumlar elbette var.
Olof Larsson

3
@MattBall Ion http kitaplığında ( github.com/koush/ion ) bir http isteğinin gövdesini bir JsonObject'e ayarlamak için bir işlev vardır.
Gagege

8

Görünüşe göre yukarıdaki cevap soruya tam olarak cevap vermemiş.

Sanırım aşağıdaki gibi bir şey arıyorsunuz:

class TransactionResponse {

   String Success, Message;
   List<Response> Response;

}

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

cevabım şöyle bir şey:

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

Gördüğünüz gibi, değişken adı, anahtar-değer çiftindeki anahtarın Json dizgi gösterimi ile aynı olmalıdır. Bu, gson dizenizi otomatik olarak JsonObject'e dönüştürecektir.


1
Üye değişkenlerde neden büyük harf kullanıyorsunuz? Neden varsayılan erişim değiştiriciyi kullanıyorsunuz? Yanıtta büyük harf istiyorsanız, @SerializedName("Success")bunun yerine örneğin kullanın.
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");

2

Bu Not GSON 2.8.6 itibarıyla , örnek yöntemi JsonParser.parsekaldırıldı ve statik bir yöntemle değiştirilmesi JsonParser.parseString:

JsonObject jsonObject = JsonParser.parseString(json).getAsJsonObject();
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.