如何使用gson库将String转换为JsonObject

Eug*_*ene 90 java json gson

请建议如何将a转换StringJsonObject使用gson库.

我不假思索地做了什么:

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

ead*_*jei 163

如果要使用,可以将其转换为JavaBean:

 Gson gson = new GsonBuilder().setPrettyPrinting().create();
 gson.fromJson(jsonString, JavaBean.class)
Run Code Online (Sandbox Code Playgroud)

要使用更灵活的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());
Run Code Online (Sandbox Code Playgroud)

这相当于以下内容:

JsonElement jelem = gson.fromJson(json, JsonElement.class);
JsonObject jobj = jelem.getAsJsonObject();
Run Code Online (Sandbox Code Playgroud)

  • 这个答案实际上回答了问题. (7认同)
  • jsonParser.parse(JSON).getAsJsonObject(); (5认同)

小智 43

要以更简单的方式执行此操作,请考虑以下事项:

JsonObject jsonObject = (new JsonParser()).parse(json).getAsJsonObject();
Run Code Online (Sandbox Code Playgroud)

  • 你可能应该注意到,这是之前发布的另一个答案的评论. (3认同)
  • 对不起,但没有代码格式..评论没有焦点..这个实际上是比其他人更好的答案 (3认同)

Mat*_*all 30

你不需要使用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]
Run Code Online (Sandbox Code Playgroud)

(反序列化)

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)
Run Code Online (Sandbox Code Playgroud)

  • 你没有回答这个问题:)当然你需要将一个String转换为一个JsonObject. (87认同)
  • 但我需要使用JsonObject. (29认同)
  • 因为我的类的方法应该返回JsonObject. (3认同)
  • @Android:......为什么?`JsonObject`是一个中间表示.在99%的用例中,您应该只关心将数据表示为Java对象,还是将其表示为包含JSON的字符串. (3认同)
  • @MattBall在Ion http库(https://github.com/koush/ion)中,有一个函数可以将http请求的主体设置为JsonObject. (3认同)

Cal*_*Che 25

String string = "abcde"; // The String which Need To Be Converted
JsonObject convertedObject = new Gson().fromJson(string, JsonObject.class);
Run Code Online (Sandbox Code Playgroud)

我这样做了,而且很有效.


小智 8

看起来上面的答案没有完全回答这个问题.

我想你正在寻找类似下面的东西:

class TransactionResponse {

   String Success, Message;
   List<Response> Response;

}

TransactionResponse = new Gson().fromJson(response, TransactionResponse.class);
Run Code Online (Sandbox Code Playgroud)

我的回答是这样的:

{"Success":false,"Message":"Invalid access token.","Response":null}
Run Code Online (Sandbox Code Playgroud)

如您所见,变量名称应与键值对中键的Json字符串表示相同.这将自动将您的gson字符串转换为JsonObject.


BAI*_*RMA 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);
Run Code Online (Sandbox Code Playgroud)


Chr*_* S. 5

请注意,从 Gson 2.8.6 开始,实例方法JsonParser.parse已被弃用并被静态方法取代JsonParser.parseString

JsonObject jsonObject = JsonParser.parseString(json).getAsJsonObject();
Run Code Online (Sandbox Code Playgroud)