【问题标题】:Convert Java objects to JSON with specific fields将 Java 对象转换为具有特定字段的 JSON
【发布时间】:2016-10-17 10:45:13
【问题描述】:

我想创建两个不同的 JSON 文档,每个文档包含 5 个字段。我有一个具有 10 个属性的 POJO 类。我想使用该 POJO 类形成具有 5 个属性的 json1 和具有 5 个属性的 json2。有没有办法构造这些对象?

【问题讨论】:

    标签: json jackson gson


    【解决方案1】:

    考虑编写两个单独的包装类,每个包装类都为这两种情况公开您想要的字段,并将 pojo 作为构造函数 arg 传递。

    因此,其中一个公开了一组属性,可能如下所示:

    public class JsonObject1 {
        private MyPojo myPojo;
        public JsonObject1(MyPojo myPojo) {
            this.myPojo = myPojo;
        }
    
        public void getProperty1() {
            return myPojo.getProperty1();
        }
        ......
    }
    

    另一个类似,但暴露了另一个属性子集。

    或者,您可以添加两个方法(可能添加到您的 POJO,或者可能添加到暴露 POJO 的服务类),每个方法都返回一个 Map(例如 HashMap),您在其中复制了特定的您想要的每个视图的属性,然后将这些地图转换为 JSON。这不是“模型驱动”的,但总体上可能工作量更少。感谢@fvu 的观察!

    public Map<String, Object> getPojoAsMap1() {
        Map<String, Object> m = new HashMap<>();
        m.put("property1", pojo.getProperty1());
        ....
        return m;
    }
    

    也有可能两种不同的 JSON 表示试图告诉你你的 POJO 应该被分成两个 POJO——有时这样的事情是关于如何改进你的代码的提示。但这要视情况而定,可能不适用于这种情况。

    【讨论】:

    • 作为替代方案(工作量少但有点混乱)OP 可以使用例如 HashMap 作为中间容器来做同样的事情。
    • @fvu 是的,公平点 - 我应该添加它,还是您想添加自己的答案?
    • 继续吧,这只是您答案的一个变体,因此为此创建另一个答案并没有多大用处。
    • @fvu 完成。谢谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-10-07
    • 1970-01-01
    • 1970-01-01
    • 2019-11-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多