邪恶八进制
2018-06-20 05:08
采纳率: 50%
浏览 6.9k
已采纳

JSON转为对象集合 忽略 某些 属性不接受

现有一 API 请求后返回 JSON字符串,字符串:

[{"default_assigned_to":"test2@seczone.cn","default_qa_contact":"","description":"HTTP请求以及HTTP相应部分","flag_types":{"attachment":[],"bug":[]},"id":3,"is_active":true,"name":"DAST","sort_key":0},...]

如上,的一个JSON对象数组,现需要将其转换为 一个对象集合,但又 不需要 接收所有的属性,比如 忽略 flag_types、sort_key、default_assigned_to等属性,不接受,也就是在我的实体类中是没有这些属性的,比如说只有id和name属性,怎么转换?

  • 写回答
  • 好问题 提建议
  • 关注问题
  • 收藏
  • 邀请回答

10条回答 默认 最新

  • a718089112 2018-06-20 05:18
    已采纳

    实体类不一样的话,只能转换为JSONObject 然后获取子对象, 一级一级的自己写转换啊

    已采纳该答案
    评论
    解决 无用 1
    打赏 举报
  • ailaillia 2018-06-20 05:15

    用正则表达式匹配,手动加到已有的类中。

    评论
    解决 无用
    打赏 举报
  • Fatal Error 2018-06-20 05:31

    引入fastJson依赖:

     <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>1.2.21</version>
            </dependency>
    

    用你的例子代码如下:

     public class TestJson {
        private String id;
        private String name;
    
        public String getId() {
            return id;
        }
    
        public void setId(String id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
    
    
        public static void main(String[] args){
            String json = "{\"default_assigned_to\":\"test2@seczone.cn\",\"default_qa_contact\":\"\",\"description\":\"HTTP请求以及HTTP相应部分\",\"flag_types\":{\"attachment\":[],\"bug\":[]},\"id\":3,\"is_active\":true,\"name\":\"DAST\",\"sort_key\":0}";
            TestJson testJson = JSON.parseObject(json, TestJson.class);
            if(testJson != null){
    
            }
        }
    }
    
    评论
    解决 无用
    打赏 举报
  • 实体类没有的属性,反序列化为对象会自动丢掉

    评论
    解决 无用
    打赏 举报
  • qq_35771342 2018-06-20 05:52

    这是反序列化出现问题

    评论
    解决 无用
    打赏 举报
  • a718089112 2018-06-20 06:33

    你试一下下面代码啊,字符串转json数组啊

    String jsonStr = "[{"default_assigned_to":"test2@seczone.cn","default_qa_contact":"","description":"HTTP请求以及HTTP相应部分","flag_types":{"attachment":[],"bug":[]},"id":3,"is_active":true,"name":"DAST","sort_key":0}]"
     try
      {
       JSONArray myJsonArray = new JSONArray(jsonStr);
    
       for(int i=0 ; i < myJsonArray.length() ;i++)
       {
        //获取每一个JsonObject对象
        JSONObject myjObject = myJsonArray.getJSONObject(i);
    
        //获取每一个对象中的值
        String id = myjObject.getString("id");
        System.out.println(id);
       }
      }
      catch (JSONException e)
      {
      }
    
    评论
    解决 无用
    打赏 举报
  • 仰望满天飘雪 2018-06-22 02:46

    用阿里云的那个json包就可以了

    评论
    解决 无用
    打赏 举报
  • 007Detective 2018-06-22 09:09

    fastjson就可以的,我贴代码:
    先新建个实体,需要的字段写进去:

     public class TestEntity {
        private int id;
        private String name;
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        @Override
        public String toString() {
            return "TestEntity{" +
                    "id='" + id + '\'' +
                    ", name='" + name + '\'' +
                    '}';
        }
    }
    
    

    再开始就可以转了:

     public class TestImpl {
        public static void main(String[] args) {
            String json = "[{\"default_assigned_to\":\"test2@seczone.cn\",\"default_qa_contact\":\"\",\"description\":\"HTTP请求以及HTTP相应部分\",\"flag_types\":{\"attachment\":[],\"bug\":[]},\"id\":3,\"is_active\":true,\"name\":\"DAST\",\"sort_key\":0},{\"default_assigned_to\":\"test2@seczone.cn\",\"default_qa_contact\":\"\",\"description\":\"HTTP请求以及HTTP相应部分\",\"flag_types\":{\"attachment\":[],\"bug\":[]},\"id\":4,\"is_active\":true,\"name\":\"test\",\"sort_key\":0}]";
            List<TestEntity> entities = JSON.parseArray(json, TestEntity.class);
            for (TestEntity entity : entities) {
                System.out.println(entity.toString());
            }
        }
    }
    

    pom.xml文件里引入的fastjson:

      <dependency>
                <groupId>com.alibaba</groupId>
                <artifactId>fastjson</artifactId>
                <version>1.2.40</version>
            </dependency>
    
    评论
    解决 无用
    打赏 举报
  • 007Detective 2018-06-26 02:28


    楼主说我代码不能执行,我贴图~

    评论
    解决 无用
    打赏 举报
  • AnotherWant 2019-03-07 15:15

    1:
    fastjson 过滤指定字段

    @JSONField(serialize=false)
    private String message;
    

    序列化的时候就不会包含这个字段。

    2:

    @JsonIgnoreProperties(value={"addressId"})//在解析成json时,忽略子属性的addressId字段
    public class DicType {
    private String addressId;
    }
    
    

    3:

    @JsonIgnore    
     private String img;
    
    评论
    解决 无用
    打赏 举报

相关推荐 更多相似问题