【问题标题】:Java cast Arraylist to JsonElementJava 将 Arraylist 转换为 JsonElement
【发布时间】:2012-12-05 18:09:25
【问题描述】:

我想用这个方法:

json.add("myText", getList(id));

函数 getList(id) 返回一个数组列表,但方法 json.add 想要一个 JsonElement。

那么,如何在 JsonElement 中转换一个数组列表?

我对此进行了测试,但它不起作用:

json.add("myText", (JsonElement)getList(id));

我也测试了这个:

JsonElement jelement = new JsonElement() {

 private ArrayList<String> list= new ArrayList<String>();

 public ArrayList<String> getList(){ 
     return this.list;
 } 

};

【问题讨论】:

    标签: java ajax json gson


    【解决方案1】:

    你不能转换它,我也看不到用 API 方法转换它的方法。我认为您需要创建自己的方法来将列表转换为数组。

    例如

    private JsonElement convertToJsonElement(List<Object> list)
    

    然后这样称呼它:

    json.add("myText", convertToJsonElement(getList(id)));
    

    或者,如果您有权访问 getList 方法,则可以将其更改为返回 JsonElement

    【讨论】:

    • 以及如何在我的函数中转换为 JsonElement ?我应该在我的方法中做什么?
    • 创建一个新的 JsonElement -> 将列表中的数据复制到 JsonElement(可能通过 JsonElement 上的 set 方法) -> 返回新的 json 元素
    • 我正在尝试这个,但我不工作: >JsonElement jelement = new JsonElement() { > private ArrayList list112 = new >ArrayList(); >> public ArrayList getList(){ > return this.list112; > } > };
    • 我无法理解该代码,也许将其以格式化代码块的形式添加到您的问题中
    【解决方案2】:

    我认为我们需要退后一步,了解您想要做什么。

    我假设您想在“myText”和其他对象数组之间创建一个映射。

    为此,您只需调用 Gson.toJson(map) ,其中 map 将键 myText 和值保存为 List 或数组。换句话说:

    Map<String, List<Object>> mapJson = new LinkedHashMap<String, List<Object>>();
    mapJson.put("myText", getList(id));
    
    String outputJson = Gson.toJson(mapJson);
    

    如果这不是您想要的,我恳请您解释您的目标,以便我们可以帮助您以 Gson 支持的方式而不是您想要的方式来实现它。

    【讨论】:

      【解决方案3】:

      com.google.gson 具有序列化 ArrayList(或任何集合)的方法。序列化后,您可以使用 JSONParser 解析字符串:

      JSONParser.parse(gson.toJson(getList(id)));
      

      参考:https://sites.google.com/site/gson/gson-user-guide#TOC-Array-Examples

      【讨论】:

      • new JSONParser.parse(new gson().toJson(getList(id)));
      【解决方案4】:

      为了从List 中获取JsonElement,您可以使用JsonTree

      List<String> myList = new ArrayList<>();
      jsonObject.add("myList", gson.toJsonTree(myList));
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2011-06-17
        • 2013-10-16
        • 1970-01-01
        • 2012-08-31
        • 1970-01-01
        • 2012-04-13
        • 2017-06-02
        相关资源
        最近更新 更多