Gson:直接将String转换为JsonObject(无POJO)
似乎无法弄清楚这一点。 我正在尝试在 GSON 中进行 JSON 树操作,但在转换为 JsonObject
之前,我不知道或不知道要将字符串转换为 POJO。有没有办法直接从 String
到 JsonObject
?
我尝试了以下方法(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])
但是 a
失败,JSON 被转义并仅解析为 JsonString
,并且 b
返回一个空的 JsonObject
。
有什么想法吗?
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
. Is there a way to go directly from a String
to JsonObject
?
I've tried the following (Scala syntax):
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, andb
returns an empty JsonObject
.
Any ideas?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(10)
使用 JsonParser;例如:
use JsonParser; for example:
尝试使用 getAsJsonObject() 而不是接受答案中使用的直接转换:
Try to use
getAsJsonObject()
instead of a straight cast used in the accepted answer:最简单的方法是使用
JsonPrimitive
类,该类派生自JsonElement
,如下所示:The simplest way is to use the
JsonPrimitive
class, which derives fromJsonElement
, as shown below:刚刚遇到同样的问题。您可以为
JsonElement
类编写一个简单的自定义反序列化器:Just encountered the same problem. You can write a trivial custom deserializer for the
JsonElement
class:JsonParser
构造函数已被弃用。使用静态方法代替:The
JsonParser
constructor has been deprecated. Use the static method instead:我相信这是一个更简单的方法:
然后您将能够像这样调用它:
这样所有的 hibernate 对象都会自动转换。
I believe this is a more easy approach:
And then you will be able to call it like this:
This way all the hibernate objects will be converted automatically.
在 EXTJS 4.X 中遇到了对数据存储进行远程排序的场景,其中字符串作为 JSON 数组(仅包含 1 个对象)发送到服务器。
与之前针对简单字符串提出的方法类似,只需在 JsonObject 之前先转换为 JsonArray。
来自客户端的字符串:[{"property":"COLUMN_NAME","direction":"ASC"}]
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).
Similar approach to what is presented previously for a simple string, just need conversion to JsonArray first prior to JsonObject.
String from client: [{"property":"COLUMN_NAME","direction":"ASC"}]
com.google.gson.JsonParser#parse(java.lang.String)
现已弃用运行得很好
,因此请使用
com.google.gson.JsonParser#parseString
,它在 Kotlin 中 示例:Java 示例:
com.google.gson.JsonParser#parse(java.lang.String)
is now deprecatedso use
com.google.gson.JsonParser#parseString
, it works pretty wellKotlin Example:
Java Example: