【问题标题】:Create merged JSON with GSON使用 GSON 创建合并的 JSON
【发布时间】:2014-05-14 16:28:12
【问题描述】:

我发现了大量使用 GSON 将单个对象或该单个对象的列表转换为其相应 JSON 的示例。很容易做到。即使对象具有对象作为其属性,这仍然是微不足道的。

但是假设我有 5 个感兴趣的对象(名称、公司、颜色、数字、糖果),它们之间根本没有任何关系。所以我进行了数据库调用,现在我的代码中有 5 个列表,其中包含上述所有内容。

现在,我怎样才能将这些列表放入一个 JSON 数组,其父名称为“items”,并包含上述所有内容作为其下的子项?所以一个父“项目”,有 5 个孩子(每个孩子都是彼此的兄弟姐妹)。

使用 GSON(或不使用??)构建这样的树或结构的适当方法是什么? 我注意到 GSON 中有很多诸如 JSONArray 之类的,但无法弄清楚。

非常感谢!

【问题讨论】:

  • 请澄清。我的理解是您希望将所有数据封装到一个 JSON 对象中。似乎创建自定义序列化程序可能是解决方案。
  • 先发布你的 JSON 字符串?

标签: java android json gson


【解决方案1】:

要合并 JSON,您需要定义一些合并约定。如果“覆盖”策略(替换或添加)符合您的要求,您可以找到有用的 JSON 合并库in this answer

【讨论】:

    【解决方案2】:

    是的,你可以。您必须首先构建自己的序列化程序。例如:

    import org.json.JSONArray;
    import org.json.JSONException;
    import org.json.JSONObject;
    
    
    public static String toJson(List<Item> items){
    
        try{
    
            JSONObject jsonObj = new JSONObject();
    
            JSONArray jsonArr = new JSONArray();
    
            for(Item i : items){
                JSONObject itemObj = new JSONObject();
                itemObj.put("names", i.getName());
                itemObj.put("companies", i.getCompanies());
                itemObj.put("colors", i.getColors());
                itemObj.put("numbers", i.getNumbers());
                itemObj.put("candy", i.getCandy());
                jsonArr.put(itemObj);
            }
    
            jsonObj.put("items", jsonArr);
    
            return jsonObj.toString();
    
        } catch(JSONException ex){
             ex.printStackTrace();
        }
    
        return null;
    }
    

    【讨论】:

    • 今晚我会试试这个,但我怀疑这会成功。也非常简洁。谢谢!
    • 当然,没问题!我刚刚编辑了我的代码,因为我忘记在for 循环的末尾添加一行。请注意它。这真的很重要:)
    【解决方案3】:

    根据字段是什么,您可以创建一个模型类并从数据库中设置对象。使用Gson 并使用jsonFrom 形成您的Json 字符串。

    例如。

    public class Items{
    
    ArrayList<String> names;
    
    String candy;
    
    //nested custom class if necessary
    ArrayList<Companies> companies;
    
    //other fields here 
    
    //getter setter
    }  
    

    现在为Items 的对象设置值。

    然后:

    Gson gson = new Gson();
    String json = gson.toJson(modelClassObject);  
    

    如果我的要求正确,json 就是你需要的字符串。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-02
      • 2016-03-09
      相关资源
      最近更新 更多