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

回答:


30

を使用する必要はありませんJsonObject。JSON文字列と独自のJavaオブジェクトとの間の変換には、Gsonを使用する必要があります。

Gson User Guideを参照してください。

(シリアライズ)

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を使用する必要があります。
ユージーン

3
私のクラスのメソッドはJsonObjectを返す必要があるためです。
ユージーン

3
@Android:...なぜ?JsonObject中間表現です。ユースケースの99%では、データをJavaオブジェクトとして、またはJSONを含む文字列として表現することだけが重要です。
マットボール

93
あなたは質問に答えません:)もちろん、実際に文字列をJsonObjectに変換する必要がある場合があります。
Olof Larsson

3
@MattBall Ion httpライブラリ(github.com/koush/ion)には、httpリクエストの本文をJsonObjectに設定する関数があります。
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();

「アサート」は余分なもので、テスト用です。
Paresh Mayani 2014年

9
この回答は、質問どおりに実際に回答します。
Janik Zikovsky、2014

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

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

44

より簡単な方法で行うには、以下を検討してください。

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

3
これは以前に別の回答へのコメントとして投稿されたことに注意してください。
Nathan Tuggy、2015

3
申し訳ありませんが、コード形式がありません..そのコメントは焦点が外れています..これは実際には他の回答より優れています
Ankit Bansal '19

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")代わりに例えばを使用してください。
Simon Zettervall 2013年

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


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

0

そのノートGson 2.8.6のように、インスタンスメソッドは、JsonParser.parse静的メソッドによって非難および置換されていますJsonParser.parseString

JsonObject jsonObject = JsonParser.parseString(json).getAsJsonObject();
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.