我有一个名为"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
...
做这件事最简单的方法是什么?
发布于 2013-08-31 19:32:03
最简单的方法肯定是使用Gson的默认解析函数fromJson()
。
当您需要反序列化为任何ParameterizedType
(例如,任何List
)时,此函数都有一个实现,即fromJson(JsonElement json, Type typeOfT)
。
在本例中,您只需要获取List<String>
的Type
,然后将JSON数组解析为该Type
,如下所示:
import java.lang.reflect.Type;
import com.google.gson.reflect.TypeToken;
JsonElement yourJson = mapping.get("servers");
Type listType = new TypeToken<List<String>>() {}.getType();
List<String> yourList = new Gson().fromJson(yourJson, listType);
在本例中,yourJson
是一个JsonElement
,但它也可以是String
、任何Reader
或JsonReader
。
你可能想看看Gson API documentation。
发布于 2017-09-22 11:48:44
我在here的Gson官方网站上读到了解决方案。
下面是你的代码:
String json = "{"client":"127.0.0.1","servers":["8.8.8.8","8.8.4.4","156.154.70.1","156.154.71.1"]}";
JsonObject jsonObject = new Gson().fromJson(json, JsonObject.class);
JsonArray jsonArray = jsonObject.getAsJsonArray("servers");
String[] arrName = new Gson().fromJson(jsonArray, String[].class);
List<String> lstName = new ArrayList<>();
lstName = Arrays.asList(arrName);
for (String str : lstName) {
System.out.println(str);
}
在显示器上显示结果:
8.8.8.8
8.8.4.4
156.154.70.1
156.154.71.1
发布于 2019-12-16 03:15:54
假设您从mapping.get("servers").getAsJsonArray()
开始,如果您可以访问Guava Streams
,则可以执行以下一行操作:
List<String> servers = Streams.stream(jsonArray.iterator())
.map(je -> je.getAsString())
.collect(Collectors.toList());
注StreamSupport
将不能在JsonElement
类型上工作,因此它是不够的。
https://stackoverflow.com/questions/18544133
复制相似问题