java gson 数组_使用Gson将JSON数组解析为java.util.List

问题

我有aJsonObjectnamed"mapping",内容如下:

{

"client": "127.0.0.1",

"servers": [

"8.8.8.8",

"8.8.4.4",

"156.154.70.1",

"156.154.71.1"

]

}

我知道我可以得到array"servers":

mapping.get("servers").getAsJsonArray()

现在我想解析那个522231412到ajava.util.List ......

最简单的方法是什么?

#1 热门回答(221 赞)

绝对最简单的方法是使用Gson的默认解析功能fromJson()。

当你需要反序列化为anyParameterizedType(例如,anyList)时,此函数的实现适用于fromJson(JsonElement json, Type typeOfT)。

在你的情况下,你只需要获取aList的Type然后将JSON数组解析为thatType,如下所示:

import java.lang.reflect.Type;

import com.google.gson.reflect.TypeToken;

JsonElement yourJson = mapping.get("servers");

Type listType = new TypeToken>() {}.getType();

List yourList = new Gson().fromJson(yourJson, listType);

在你的情况下yourJson是aJsonElement,但也可能是aString,anyReader或aJsonReader。

#2 热门回答(17 赞)

下面的代码是使用com.google.gson.JsonArray。我已经打印了列表中的元素数量以及列表中的元素

import java.util.ArrayList;

import com.google.gson.Gson;

import com.google.gson.JsonArray;

import com.google.gson.JsonObject;

import com.google.gson.JsonParser;

public class Test {

static String str = "{ "+

"\"client\":\"127.0.0.1\"," +

"\"servers\":[" +

" \"8.8.8.8\"," +

" \"8.8.4.4\"," +

" \"156.154.70.1\"," +

" \"156.154.71.1\" " +

" ]" +

"}";

public static void main(String[] args) {

// TODO Auto-generated method stub

try {

JsonParser jsonParser = new JsonParser();

JsonObject jo = (JsonObject)jsonParser.parse(str);

JsonArray jsonArr = jo.getAsJsonArray("servers");

//jsonArr.

Gson googleJson = new Gson();

ArrayList jsonObjList = googleJson.fromJson(jsonArr, ArrayList.class);

System.out.println("List size is : "+jsonObjList.size());

System.out.println("List Elements are : "+jsonObjList.toString());

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

}

}

}

OUTPUT

List size is : 4

List Elements are : [8.8.8.8, 8.8.4.4, 156.154.70.1, 156.154.71.1]

#3 热门回答(1 赞)

我从Gson的官方网站here阅读解决方案

这段代码适合你:

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 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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值