gson 라이브러리를 사용하여 문자열을 JsonObject로 변환하는 방법


91

a StringJsonObject사용하여 gson라이브러리 로 변환하는 방법을 조언하십시오 .

내가 실패한 일 :

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

답변:


28

을 사용할 필요가 없습니다 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이 포함 된 문자열로 표현하는 데만 신경을 써야합니다.
Matt Ball

95
당신은 질문에 대답하지 않습니다 :) 물론 당신이 실제로 String을 JsonObject로 변환해야하는 경우가 있습니다.
Olof Larsson 2012

3
@MattBall Ion http 라이브러리 ( github.com/koush/ion )에는 http 요청의 본문을 JsonObject로 설정하는 함수가 있습니다.
Gagege 2015 년

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-06-24

9
이 답변은 실제로 질문에 대한 답변입니다.
Janik Zikovsky

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

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

44

더 간단한 방법으로 수행하려면 다음을 고려하십시오.

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

3
이것은 이전에 다른 답변에 대한 의견으로 게시되었음을 유의해야합니다.
Nathan Tuggy 2015

3
죄송하지만 코드 형식이 없습니다. 그 주석은 초점이 맞지 않습니다. 그리고 이것은 실제로 다른 것보다 더 나은 대답입니다
Ankit Bansal

28
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")대신 예를 사용하십시오.
사이먼 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

참고 GSON 2.8.6 기준으로 , 인스턴스 메소드는 JsonParser.parse사용되지 않으며 정적 방법으로 교체 JsonParser.parseString:

JsonObject jsonObject = JsonParser.parseString(json).getAsJsonObject();
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.