我有一个名为"mapping"
的JsonObject
,包含以下内容:
{
"client": "127.0.0.1",
"servers": [
"8.8.8.8",
"8.8.4.4",
"156.154.70.1",
"156.154.71.1"
]
}
我知道我可以得到数组"servers"
:
mapping.get("servers").getAsJsonArray()
现在我想把JsonArray
解析成java.util.List
...
最简单的方法是什么?
6条答案
按热度按时间q8l4jmvw1#
当然,最简单的方法是使用Gson的默认解析函数
fromJson()
。此函数有一个实现,适合于需要反序列化为任何
ParameterizedType
(例如,任何List
)的情况,该实现为fromJson(JsonElement json, Type typeOfT)
。在本例中,您只需要获取
List<String>
的Type
,然后将JSON数组解析为Type
,如下所示:在您的例子中,
yourJson
是JsonElement
,但它也可以是String
、任何Reader
或JsonReader
。你可能想看看Gson API documentation。
bxpogfeg2#
下面的代码使用了
com.google.gson.JsonArray
。我已经打印了list中的元素数以及List中的元素输出
aamkag613#
我在这里从Gson的官方网站阅读解决方案
这是给你的代码:
结果显示在监视器上:
wdebmtf24#
我能够让列表Map工作,只是使用
@SerializedName
的所有字段..没有逻辑围绕Type
是必要的。通过调试器运行代码(* 在下面的步骤4中 *),我可以观察到
List<ContentImage> mGalleryImages
对象填充了JSON数据下面是一个例子:
1. JSON格式
2.带有列表的Java类
3.列表项的Java类
4.处理JSON的Java代码
qfe3c7zg5#
Kotlin扩展
对于Kotlin开发人员,您可以使用此扩展
nuypyhwy6#
假设您从
mapping.get("servers").getAsJsonArray()
开始,如果您可以访问GuavaStreams
,则可以执行下面的一行代码:注意
StreamSupport
不能在JsonElement
类型上工作,所以它是不够的。