使用 Gson 读取 JSON 字符串
我一直在谷歌上搜索试图解决这个问题,但我似乎做不到。我有以下 json 字符串,该字符串从我需要与之交互的另一个源返回到我的 java 小程序。
{
"A01": {"Status": "Ready", "Time": "00:00"},
"A02": {"Status": "Ready", "Time": "00:00"},
......
}
目前我不确定应该如何使用 Gson 将其解析到我的小程序中。当我与该程序的设计者交谈时。 json 字符串设计用于 php 而不是 java,因此当我在 php 中对其进行解码时,它给了我一个很好的多维关联数组。
对此有何建议。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
PHP 中的关联数组转换为
Map< /code>
在 Java 中。因此,在 Gson 看来,您的 JSON 格式为
Map
,其中Event
类具有字段status
和时间
。是的,大写的字段名称很难看,但这就是 JSON 的样子。否则,您需要创建自定义 Gson解串器。
以下是如何转换它。
A01
、A02
等成为Map
键,其值成为Map
Event 值代码>.您可能需要添加另一个自定义反序列化器以将Time
转换为java.util.Date
。作为不同的替代方案,您还可以使用
Map>
代替。An associative array in PHP translates to a
Map
in Java. So, in Gson's eyes, your JSON is in format ofMap<String, Event>
where theEvent
class has the fieldsstatus
andtime
.Yes, capitalized field names are ugly, but that's how your JSON look like. You would otherwise need to create a custom Gson deserializer.
Here's how you can convert it.
A01
,A02
, etc becomeMap
keys and its value becomes theEvent
value ofMap
. You may want to add another custom deserializer to get theTime
into ajava.util.Date
.As a different alternative, you can also use
Map<String, Map<String, String>>
instead.该链接向我指出了一些我根本没有看过的东西。我还忘了在我的帖子中提到,了解 A01、A02 等非常重要。但是您在帖子中指出的一个链接引导我想出这个对我有用的方法。
That link pointed me to something i wasn't even looking at. I also forgot to mention in my post that Knowing the A01, A02, etc is very important. But a link in the post that you pointed me to lead me to come up with this which works for me.
如果您的 json 略有不同,如下所示:
Gson 将能够将 json 转换为对象集合,您必须自己定义该对象。所以你需要:
然后像这样使用它:
然后你可以根据需要使用对象列表。
(进一步阅读此处)
If your json was slightly different, like below:
Gson would be able to convert the json into a collection of objects, the object you would have to define yourself. So you would need:
And then use that like so:
You could then use the list of objects as you require.
(further reading over here)