首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何将JSONArray转换为通用List<T>?

将JSONArray转换为通用List<T>的方法可以通过以下步骤实现:

  1. 首先,将JSONArray对象转换为普通的Java数组。可以使用JSONArray类的toArray()方法来实现这一步骤。
  2. 接下来,创建一个空的List<T>对象,用于存储转换后的数据。
  3. 遍历Java数组,将每个元素转换为目标类型T,并添加到List<T>中。这可以通过使用Java的反射机制来实现,具体步骤如下:
    • 获取目标类型T的Class对象,可以通过Class.forName("包名.类名")来获取。
    • 使用Class对象的newInstance()方法创建目标类型T的实例。
    • 使用Class对象的getMethod()方法获取目标类型T的setter方法。
    • 调用setter方法将转换后的元素设置到目标类型T的实例中。
    • 将目标类型T的实例添加到List<T>中。

下面是一个示例代码,演示了如何将JSONArray转换为通用List<T>:

代码语言:java
复制
import org.json.JSONArray;
import org.json.JSONObject;

import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.List;

public class JSONArrayToListConverter<T> {
    public List<T> convert(JSONArray jsonArray, Class<T> targetType) throws Exception {
        List<T> resultList = new ArrayList<>();

        for (int i = 0; i < jsonArray.length(); i++) {
            JSONObject jsonObject = jsonArray.getJSONObject(i);
            T targetObject = targetType.newInstance();

            for (String key : jsonObject.keySet()) {
                Object value = jsonObject.get(key);
                Method setter = getSetter(targetType, key);
                setter.invoke(targetObject, value);
            }

            resultList.add(targetObject);
        }

        return resultList;
    }

    private Method getSetter(Class<?> targetType, String fieldName) throws Exception {
        String setterName = "set" + fieldName.substring(0, 1).toUpperCase() + fieldName.substring(1);
        Method[] methods = targetType.getMethods();

        for (Method method : methods) {
            if (method.getName().equals(setterName)) {
                return method;
            }
        }

        throw new NoSuchMethodException("Setter method not found for field: " + fieldName);
    }
}

使用示例:

代码语言:java
复制
JSONArray jsonArray = new JSONArray("[{\"name\":\"Alice\",\"age\":25},{\"name\":\"Bob\",\"age\":30}]");
JSONArrayToListConverter<Person> converter = new JSONArrayToListConverter<>();
List<Person> personList = converter.convert(jsonArray, Person.class);

for (Person person : personList) {
    System.out.println("Name: " + person.getName() + ", Age: " + person.getAge());
}

上述示例中,假设存在一个名为Person的类,具有name和age属性以及对应的getter和setter方法。

请注意,这只是一个简单的示例,实际应用中可能需要根据具体的数据结构和业务逻辑进行适当的修改和调整。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

杨老师课堂之零基础学习JSON知识点

演示代码: /** * 演示JSON-LIB小工具  */ public class Demo1 { /* * 当map来用 */ @Test public void fun1() { JSONObject map = new JSONObject(); map.put("name", "zhangSan"); map.put("age", 23); map.put("sex", "male"); String s = map.toString(); System.out.println(s); } /* * 当你已经有一个Person对象时,可以把Person转换成JSONObject对象 */ @Test public void fun2() { Person p = new Person("liSi", 32, "female"); // 把对象转换成JSONObject类型 JSONObject map = JSONObject.fromObject(p); System.out.println(map.toString()); } /** * JSONArray */ @Test public void fun3() { Person p1 = new Person("zhangSan", 23, "male"); Person p2 = new Person("liSi", 32, "female"); JSONArray list = new JSONArray(); list.add(p1); list.add(p2); System.out.println(list.toString()); } /** * 原来就有一个List,我们需要把List转换成JSONArray */ @Test public void fun4() { Person p1 = new Person("zhangSan", 23, "male"); Person p2 = new Person("liSi", 32, "female"); List<Person> list = new ArrayList<Person>(); list.add(p1); list.add(p2); System.out.println(JSONArray.fromObject(list).toString()); } }

03
领券