【问题标题】:Logical solution for creating a JSON structure创建 JSON 结构的逻辑解决方案
【发布时间】:2012-02-08 18:44:33
【问题描述】:

我不确定这是否可能,但我认为可以使用 JSONArray.put 方法来完成。
这是我的问题:

我有两个列表:

ArrayList<Students> nativeStudents;
ArrayList<transferStudents> transferStudents = nativeStudents.getTransferStudentsList();

我使用 transferStudents 列表生成的 JSON 就在此处:http://jsfiddle.net/QLh77/2/,使用以下代码:

  public static JSONObject getMyJSONObject( List<?> list )
    {
        JSONObject json = new JSONObject();
        JsonConfig config = new JsonConfig();
        config.addIgnoreFieldAnnotation( MyAppJsonIgnore.class );

        if( list.size() > 0 )
        {
            JSONArray array = JSONArray.fromObject( list, config );

            json.put( "students", array );
        }
        else
        {
            //Empty Array
            JSONArray array = new JSONArray();
            json.put( "students",
                      array );
        }

        return json;
    }

现在我想要得到的是具有以下结构的 JSON 数据:http://jsfiddle.net/bsa3k/1/(注意两个数组元素中的 tempRollNumber 字段)。
我正在考虑这样做:(这里的if条件用于业务逻辑)

if(transferStudents.getNewStudentDetails().getRollNumber() == nativeStudents.getNativeStudentDetails.getStudentId()){

     json.put("tempRollNumber", transferStudents.getNewStudentDetails().getRollNumber());

}

但这会在数组元素之外添加 tempRollNumber,我希望这个 JSON 元素成为学生数组每个条目的一部分。

PS:我无法编辑 transferStudents 类以添加 tempRollNumber 字段。

【问题讨论】:

  • 最好创建 Java 对象来表示您的对象,然后使用您的应用程序服务器(您必须有一个,因为您已标记此 java-ee)为您生成 JSON。
  • 嗨,保罗,感谢您的建议。但是这个问题很牵强。我必须在列表被填充之后并且在它被传递到前端之前添加这个字段。
  • 扩展 List 中包含的对象,添加您需要的字段,然后编组您的对象而不是您提供的对象。

标签: java javascript jquery json jakarta-ee


【解决方案1】:

由于没有人提出更好的建议,我将把上面的 cmets 变成答案。

处理此问题的最佳方法是创建数据的对象模型,而不是自己创建 JSON 输出。您的应用服务器或容器可以为您处理。

虽然您无法更改在List 中收到的对象,但您可以扩展对象的类以添加您自己的字段。当您编组它时,这些字段将出现在 JSON 中。

【讨论】:

  • 嗨,保罗,这是我保留在图表上的一个选项。我想知道是否有其他解决方案?
  • 唯一的其他选择是完全解构您获得的对象并手动创建 JSON(即使用库)。你不能把蛋糕也吃掉,即在修改对象时自动解组对象,至少不容易。
猜你喜欢
  • 1970-01-01
  • 2011-12-24
  • 2021-02-27
  • 1970-01-01
  • 2012-06-04
  • 1970-01-01
  • 1970-01-01
  • 2013-10-28
  • 2019-03-06
相关资源
最近更新 更多