将一个String类型的json数据转成对应实体的List集合

这个借助了

import com.fasterxml.jackson.databind.JavaType;

使用下面这个方法做转换,可以说是一个工具吧,注意一下,constructParametricType()这个方法其实已经作废了

public static JavaType getCollectionType(Class<?> collectionClass, Class<?>... elementClasses) {
        ObjectMapper mapper = new ObjectMapper();
        return mapper.getTypeFactory().constructParametricType(collectionClass, elementClasses);
}

下面来转一下,这里的PsOrg是一个POJO

                String returnObj = jso.get("returnObj").toString();
                JavaType javaType = getCollectionType(ArrayList.class, PsOrg.class);
                List<PsOrg> psOrgList = (List<PsOrg>) objectMapper.readValue(returnObj, javaType);

还有一些其他方法,比如google的Gson,方法里的str就是一个json类型的字符串

Gson gson = new Gson();
List<String> mfgLines = gson.fromJson(str, new TypeToken<List<String>>() {}.getType());

还有个更方便的方法,使用阿里的fastjson,只需要一行代码

List<Model> list = JSON.parseArray("你的json字符串", Model.class); (Model是你的实体)
如果两边的字段数量不一致,可以在你的实体类上添加下面注解

@JsonIgnoreProperties(ignoreUnknown = true)




附录:我们看一下那个作废的方法以及新的替换方法
源码

/**
     * @deprecated Since 2.5, use {@link #constructParametrizedType} instead.
     */
    @Deprecated
    public JavaType constructParametricType(Class<?> parametrized, Class<?>... parameterClasses) {
        return constructParametrizedType(parametrized, parametrized, parameterClasses);
    }

/**
     * Factory method for constructing {@link JavaType} that
     * represents a parameterized type. For example, to represent
     * type <code>List<Integer></code>, you could
     * call
     *<pre>
     *  TypeFactory.constructParametrizedType(List.class, List.class, Integer.class);
     *</pre>
     *<p>
     * The reason for first two arguments to be separate is that parameterization may
     * apply to a super-type. For example, if generic type was instead to be
     * constructed for <code>ArrayList<Integer></code>, the usual call would be:
     *<pre>
     *  TypeFactory.constructParametrizedType(ArrayList.class, List.class, Integer.class);
     *</pre>
     * since parameterization is applied to {@link java.util.List}.
     * In most cases distinction does not matter, but there are types where it does;
     * one such example is parameterization of types that implement {@link java.util.Iterator}.
     *<p>
     * NOTE: type modifiers are NOT called on constructed type itself; but are called
     * when resolving <code>parameterClasses</code> into {@link JavaType}.
     *
     * @param parametrized Type-erased type of instance being constructed
     * @param parametersFor class or interface for which type parameters are applied; either
     *   <code>parametrized</code> or one of its supertypes
     * @param parameterClasses Type parameters to apply
     * 
     * @since 2.5
     */
    public JavaType constructParametrizedType(Class<?> parametrized, Class<?> parametersFor,
            Class<?>... parameterClasses)
    {
        int len = parameterClasses.length;
        JavaType[] pt = new JavaType[len];
        for (int i = 0; i < len; ++i) {
            pt[i] = _fromClass(parameterClasses[i], null);
        }
        return constructParametrizedType(parametrized, parametersFor, pt);
    }
可以仔细看一下注释,说的很清晰,我还没尝试这个




  • 0
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 5
    评论
可以通过以下步骤将JSON数据换为List集合: 1. 创建一个Java类,该类应该包含与JSON键相对应的属性。 2. 将JSON数据换为Java对象的数组或列表。 3. 遍历Java对象数组或列表,并将每个对象添加到List集合中。 以下是一个示例代码,以说明如何将JSON数据换为List集合: 假设我们有以下JSON数据: ``` [ { "name": "John", "age": 30, "address": { "street": "123 Main St", "city": "New York", "state": "NY", "zip": "10001" } }, { "name": "Jane", "age": 25, "address": { "street": "456 Elm St", "city": "Los Angeles", "state": "CA", "zip": "90001" } } ] ``` 并且我们已经创建了一个名为Person的Java类,该类包含name、age和address属性。 Address类也已经创建,其中包含street、city、state和zip属性。 我们可以使用Jackson库将JSON数据换为List集合: ``` ObjectMapper objectMapper = new ObjectMapper(); String json = "[{\"name\":\"John\",\"age\":30,\"address\":{\"street\":\"123 Main St\",\"city\":\"New York\",\"state\":\"NY\",\"zip\":\"10001\"}},{\"name\":\"Jane\",\"age\":25,\"address\":{\"street\":\"456 Elm St\",\"city\":\"Los Angeles\",\"state\":\"CA\",\"zip\":\"90001\"}}]"; List<Person> personList = objectMapper.readValue(json, new TypeReference<List<Person>>(){}); ``` 在此示例中,我们首先创建了一个ObjectMapper对象,该对象用于将JSON数据换为Java对象。然后,我们将JSON数据作为字符串传递给readValue()方法,并指定要将其换为的Java类(Person类)。最后,我们将返回的Person对象存储在personList变量中。 现在,我们可以遍历personList集合,并访问每个Person对象的属性: ``` for (Person person : personList) { String name = person.getName(); int age = person.getAge(); String street = person.getAddress().getStreet(); String city = person.getAddress().getCity(); String state = person.getAddress().getState(); String zip = person.getAddress().getZip(); } ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值