【问题标题】:Add JSON(or object) to a STRING json array将 JSON(或对象)添加到 STRING json 数组
【发布时间】:2015-12-10 10:00:33
【问题描述】:

我有一个字符串,看起来像一个带有对象的 JSON 数组:

myJsonArray = "[
                {\"name\":\"alex\",\"weight\":\"88\"},
                {\"name\":\"Emma\",\"weight\":\"71\"}
               ]";

向字符串添加新对象的最简单方法是什么?

字符串 (myJsonArray) 在程序会话之间保存到一个文件中,因此我必须处理字符串 (myJsonArray)。

我知道 Gson 有一个很好的方法可以将字符串数组转换为 Java 对象:

 MyClass[] person = gson.fromJson(myJsonArray,MyClass[].class);

也许 Gson 有什么好办法?还是不...

【问题讨论】:

    标签: java arrays json gson


    【解决方案1】:

    最简单的方法是为您的 myJsonArray 中的每个 Json 对象创建一个 POJO 模型,然后在列表、数组或您需要的任何东西中处理它...

    示例

    public class Person{
    
        @SerializedName("name")
    
        private String name;
        @SerializedName("weight")
    
        private int weight;
    
        /**
         * @return the name
         */
        public String getName() {
            return name;
        }
    
        /**
         * @param name
         *            the name to set
         */
        public void setName(String name) {
            this.name = name;
        }
    
        /**
         * @return the weight
         */
        public int getWeight() {
            return weight;
        }
    
        /**
         * @param weight
         *            the weight to set
         */
        public void setWeight(int weight) {
            this.weight = weight;
        }
    
        @Override
        public String toString() {
            return "Person [name=" + name + ", weight=" + weight + "]";
        }
    
        /**
         * @return json
         */
        public String toJson() {
            return new Gson().toJson(this);
        }
    
    }
    

    反序列化

    Gson gson = new Gson();
    List<Person> personList = gson.fromJson(myJsonArray,Person.class);
    personList.add(new Person());
    

    【讨论】:

      【解决方案2】:

      已经有一个答案向您展示如何使用GSONJSON 转换为POJO,反之亦然。虽然从我的角度来看这是首选方法,但是您也可以使用 GSON 仅将元素添加到 json 数组。

      假设你的 json 数组字符串如下:

      String myJsonArray = "["  
                  + "{\"name\":\"alex\",\"weight\":\"88\"},"  
                  + "{\"name\":\"Emma\",\"weight\":\"71\"}"
                  + "]";
      

      初始化Gson对象如下图:

      Gson gson = new GsonBuilder().setPrettyPrinting().serializeNulls().create();
      

      将你的json字符串数组转换为JsonElement如下图:

      JsonElement elements = gson.fromJson(myJsonArray, JsonElement.class); 
      

      一旦你有了JsonElement,它就包含了你的json数组,那么你可以将它转换为JsonArray,如下所示:

      JsonArray arr = elements.getAsJsonArray(); 
      

      现在您的数组为JsonArray,您可以通过遍历元素将它们打印出来,如下所示:

      for(JsonElement e: arr) {
          System.out.println(e);
      }
      

      这会给你(基于上面的字符串):

      {"name":"alex","weight":"88"}
      {"name":"Emma","weight":"71"}
      

      假设您想在现有数组中添加一个新对象,但是您有以下 json 字符串形式的对象:

      String newObject = "{\"name\":\"Raf\", \"weight\":\"173\"}"; 
      
      //Creates new JsonElement from json string
      JsonElement newElement = gson.fromJson(newObject, JsonElement.class);
      

      现在您可以将此元素添加到现有数组中,如下所示:

      arr.add(newElement);
      

      最后你可以像我们之前那样打印你的新 json 数组了:

      for(JsonElement e: arr) {
          System.out.println(e);
      }
      

      你得到的输出是

      {"name":"alex","weight":"88"}
      {"name":"Emma","weight":"71"}
      {"name":"Raf","weight":"173"}
      

      【讨论】:

      • 这很好用,但它是向字符串添加新对象的最简单方法吗?
      • 您可以根据您正在从事的工作的要求/范围/等来决定哪种方法最简单。此答案仅使用 Gson
      猜你喜欢
      • 1970-01-01
      • 2018-07-20
      • 1970-01-01
      • 2015-09-03
      • 1970-01-01
      • 1970-01-01
      • 2016-04-20
      • 1970-01-01
      相关资源
      最近更新 更多