大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。
Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺
本文翻译自:Gson: Directly convert String to JsonObject (no POJO)
Can’t seem to figure this out. 似乎无法弄清楚。 I’m attempting JSON tree manipulation in GSON, but I have a case where I do not know or have a POJO to convert a string into, prior to converting to JsonObject
. 我正在尝试在GSON中进行JSON树操作,但是在转换为JsonObject
之前,我不知道或没有POJO将字符串转换成这种情况。 Is there a way to go directly from a String
to JsonObject
? 有没有一种方法可以直接从String
转到JsonObject
?
I’ve tried the following (Scala syntax): 我已经尝试了以下(Scala语法):
val gson = (new GsonBuilder).create
val a: JsonObject = gson.toJsonTree("""{ "a": "A", "b": true }""").getAsJsonObject
val b: JsonObject = gson.fromJson("""{ "a": "A", "b": true }""", classOf[JsonObject])
but a
fails, the JSON is escaped and parsed as a JsonString
only, and b
returns an empty JsonObject
. 但是a
失败,仅将JSON逸出并解析为JsonString
, b
返回一个空的JsonObject
。
Any ideas? 有任何想法吗?
#1楼
参考:https://stackoom.com/question/hfn2/Gson-直接将String转换为JsonObject-无POJO
#2楼
String jsonStr = "{\"a\": \"A\"}";
Gson gson = new Gson();
JsonElement element = gson.fromJson (jsonStr, JsonElement.class);
JsonObject jsonObj = element.getAsJsonObject();
#3楼
Came across a scenario with remote sorting of data store in EXTJS 4.X where the string is sent to the server as a JSON array (of only 1 object). 遇到了一种在EXTJS 4.X中对数据存储进行远程排序的情况,其中该字符串作为JSON数组(只有1个对象)发送到服务器。
Similar approach to what is presented previously for a simple string, just need conversion to JsonArray first prior to JsonObject. 与之前针对简单字符串提供的方法类似,只需要在JsonObject之前先转换为JsonArray。
String from client: [{“property”:”COLUMN_NAME”,”direction”:”ASC”}] 来自客户的字符串: [{“ property”:“ COLUMN_NAME”,“ direction”:“ ASC”}]
String jsonIn = "[{\"property\":\"COLUMN_NAME\",\"direction\":\"ASC\"}]";
JsonArray o = (JsonArray)new JsonParser().parse(jsonIn);
String sortColumn = o.get(0).getAsJsonObject().get("property").getAsString());
String sortDirection = o.get(0).getAsJsonObject().get("direction").getAsString());
#4楼
The simplest way is to use the JsonPrimitive
class, which derives from JsonElement
, as shown below: 最简单的方法是使用从JsonElement
派生的JsonPrimitive
类,如下所示:
JsonElement element = new JsonPrimitive(yourString);
JsonObject result = element.getAsJsonObject();
#5楼
I believe this is a more easy approach: 我相信这是一个更简单的方法:
public class HibernateProxyTypeAdapter implements JsonSerializer<HibernateProxy>{
public JsonElement serialize(HibernateProxy object_,
Type type_,
JsonSerializationContext context_) {
return new GsonBuilder().create().toJsonTree(initializeAndUnproxy(object_)).getAsJsonObject();
// that will convert enum object to its ordinal value and convert it to json element
}
public static <T> T initializeAndUnproxy(T entity) {
if (entity == null) {
throw new
NullPointerException("Entity passed for initialization is null");
}
Hibernate.initialize(entity);
if (entity instanceof HibernateProxy) {
entity = (T) ((HibernateProxy) entity).getHibernateLazyInitializer()
.getImplementation();
}
return entity;
}
}
And then you will be able to call it like this: 然后您将可以这样调用它:
Gson gson = new GsonBuilder()
.registerTypeHierarchyAdapter(HibernateProxy.class, new HibernateProxyTypeAdapter())
.create();
This way all the hibernate objects will be converted automatically. 这样,所有休眠对象将自动转换。
#6楼
//import com.google.gson.JsonObject;
JsonObject complaint = new JsonObject();
complaint.addProperty("key", "value");
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/172479.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...