如何使用gson库将一个字符串转换为JsonObject

108
请指导如何使用gson库将String转换为JsonObject。
我的无效尝试:
String string = "abcde";
Gson gson = new Gson();
JsonObject json = new JsonObject();
json = gson.toJson(string); // Can't convert String to JsonObject
11个回答

190

如果您想要,您可以使用以下方法将其转换为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
5
jsonParser.parse(json).getAsJsonObject(); - Mike
JsonObject jo = jsonParser.parse(json).getAsJsonObject(); and Assert.assertTrue(jo.get("Success").getAsBoolean()); - smac89
JsonParser has been restructured since this answer. You should now use the one-liner JsonObject jsonObj = JsonParser.parseString(json).getAsJsonObject(); - squaregoldfish
JsonParser现已弃用。 - Lunatic

50

为了更简单地做到这一点,请考虑以下内容:

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

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

我这样做了,它有效了。


29

无需使用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)

38
我需要使用JsonObject。 - Eugene
@Android:你为什么这样认为? - Matt Ball
3
因为我的类的一个方法应该返回JsonObject。 - Eugene
3
@Android: 为什么要使用JsonObjectJsonObject是一种中间表示形式。在99%的情况下,你真正关心的应该是将数据表示为Java对象或包含JSON的字符串。请注意,这里涉及翻译技巧,所以可能并不是逐字逐句的翻译。 - Matt Ball
95
你没有回答问题 :) 当然,有时你确实需要将一个字符串转换为JsonObject。 - Olof Larsson
3
在Ion http库(https://github.com/koush/ion)中,有一个函数可以将http请求的主体设置为JsonObject。 - Gagege

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

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

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

as of Gson 2.8.6

JsonObject jsonObject = JsonParser.parseString(json).getAsJsonObject();

4
Gson gson = new Gson();
YourClass yourClassObject = new YourClass();
String jsonString = gson.toJson(yourClassObject);

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

0

如果你只想将字符串转换为JSON格式,那么可以使用以下方法:

使用 org.json 库:https://mvnrepository.com/artifact/org.json/json/20210307

<!-- https://mvnrepository.com/artifact/org.json/json -->
<dependency>
    <groupId>org.json</groupId>
    <artifactId>json</artifactId>
    <version>20210307</version>
</dependency>

导入这些

import org.json.JSONException;
import org.json.JSONObject;
import org.json.JSONArray;

现在将其转换为

//now you can convert string to array and object without having complicated maps and objects
 
try {
 JSONArray jsonArray = new JSONArray("[1,2,3,4,5]");
 //you can give entire jsonObject here 
 JSONObject jsonObject= new JSONObject("{\"name\":\"test\"}") ;
             System.out.println("outputarray: "+ jsonArray.toString(2));
             System.out.println("outputObject: "+ jsonObject.toString(2));
        }catch (JSONException err){
            System.out.println("Error: "+ err.toString());
        }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接