有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

在java中重新格式化JSON数组/对象

我正在尝试将这个json文件重新格式化为不同的格式。我以前从未用过杰克逊或格森。我有这个想法,但我不知道如何实施

所以我有一个json文件:file。包含以下内容的json:

 { 
     "Fruits": [
           {
             "name": "avocado",
             "organic": true
           },
           {
              "name": "mango",
              "organic": true
           }
    ]
}

我想要的是这种格式:

    { 
       "List Fruits":{
        "Fruits": [
           {
             "name": "avocado",
             "organic": true
           },
           {
              "name": "mango",
              "organic": true
           }
        ]
      }  
   }

以某种方式在json文件中添加“列表水果”

我正在尝试使用jackson api,但我不知道如何使用


共 (3) 个答案

  1. # 1 楼答案

    我强烈建议你浏览一下杰克逊或格森图书馆的文档,因为你提到你是新来的。 我已经为这个项目创建了一个git回购示例。此示例使用Jackson API

    访问https://github.com/rajramo61/jsonwrapper

    final InputStream fileData = ClassLoader.getSystemResourceAsStream("file.json");
        ObjectMapper mapper = new ObjectMapper();
        InitialJson initialJson = mapper.readValue(fileData, InitialJson.class);
        System.out.println(mapper.writeValueAsString(initialJson));
        final FinalJson finalJson = new FinalJson();
        finalJson.setListOfFruits(initialJson);
        System.out.println(mapper.writeValueAsString(finalJson));
    

    这是水果课

    public class Fruit {
    private String name;
    private boolean organic;
    
    public String getName() {
        return name;
    }
    
    public void setName(String name) {
        this.name = name;
    }
    
    public boolean getOrganic() {
        return organic;
    }
    
    public void setOrganic(boolean organic) {
        this.organic = organic;
    }
    
    @Override
    public String toString() {
        return "Fruit{" +
                "name='" + name + '\'' +
                ", organic=" + organic +
                '}';
    }
    

    }

    下面是最后一个JSON类的详细信息。这个类将包装从jsn文件加载的初始json

    public class FinalJson {
    private InitialJson listOfFruits;
    
    @JsonProperty("List Fruits")
    public InitialJson getListOfFruits() {
        return listOfFruits;
    }
    
    public void setListOfFruits(InitialJson listOfFruits) {
        this.listOfFruits = listOfFruits;
    }
    

    }

    下面是InitialJson类的详细信息。这是一个从json文件中提取数据的类

    public class InitialJson {
    private List<Fruit> fruits;
    
    @JsonProperty("Fruits")
    public List<Fruit> getFruits() {
        return fruits;
    }
    
    public void setFruits(List<Fruit> fruits) {
        this.fruits = fruits;
    }
    
    @Override
    public String toString() {
        return "InitialJson{" +
                "fruits=" + fruits +
                '}';
    }
    

    }

    你可以进行回购并在本地完成,它应该可以正常工作

  2. # 2 楼答案

    将JSON分配给字符串变量,例如,将上述JSON分配给名为json的变量:

    String json = "..." // here put your JSON text;
    

    为对象准备类:

    class Fruit {
        private String name;
        private boolean organic;
    }
    
    class Fruits {
        private List<Fruit> fruits;
    }
    

    然后使用Gson将JSON转换为您的对象:

    Gson gson = new Gson();
    Fruits fruits = gson.fromJson(json, Fruits.class);
    

    接下来为fruits对象准备包装类ListOfFruits

    class ListOfFruits {
        private Fruits listOfFruits;
    
        public ListOfFruits(Fruits fruits) {
            listOfFruits = fruits;
        }
    }
    

    下一步将fruits对象打包到另一个对象中:

    ListOfFruits lof = new ListOfFruits(fruits);
    

    最后生成输出JSON:

    String newJson = gson.toJson(lof);
    
  3. # 3 楼答案

    您不需要创建POJO模型来读取和更新JSON。使用Jackson,您可以将整个JSON有效负载读取到JsonNode,使用所需的键创建一个Map,并序列化回JSON。请参见以下示例:

    import com.fasterxml.jackson.databind.JsonNode;
    import com.fasterxml.jackson.databind.ObjectMapper;
    import com.fasterxml.jackson.databind.SerializationFeature;
    
    import java.io.File;
    import java.util.Collections;
    import java.util.Map;
    
    public class JsonApp {
    
        public static void main(String[] args) throws Exception {
            File jsonFile = new File("./resource/test.json").getAbsoluteFile();
    
            ObjectMapper mapper = new ObjectMapper();
            mapper.enable(SerializationFeature.INDENT_OUTPUT);
    
            JsonNode root = mapper.readTree(jsonFile);
            Map<String, JsonNode> output = Collections.singletonMap("List Fruits", root);
    
            System.out.println(mapper.writeValueAsString(output));
        }
    }
    

    以上代码打印:

    {
      "List Fruits" : {
        "Fruits" : [ {
          "name" : "avocado",
          "organic" : true
        }, {
          "name" : "mango",
          "organic" : true
        } ]
      }
    }