• java-JSON的生成与解析


    一:org.json的使用

    1.java生成json

    1-1:通过JSONObject
        public static String createJson() {
            JSONObject toly = new JSONObject();
    
            toly.put("name", "toly");
            toly.put("age", 24);
            toly.put("birthday", "1994-03-28");
            toly.put("isman", false);
            toly.put("major", new String[]{"java", "c++"});
    
            return toly.toString();
        }
    1-2:通过Map
        public static String createJsonByMap() {
            Map<String, Object> toly = new HashMap<String, Object>();
    
            toly.put("name", "toly");
            toly.put("age", 24);
            toly.put("birthday", "1994-03-28");
            toly.put("isman", false);
            toly.put("major", new String[]{"java", "c++"});
    
            return new JSONObject(toly).toString();
        }
    1-3:通过bean
        public static String createJsonByBean() {
            Person toly = new Person();
            toly.setAge(24);
            toly.setName("toly");
            toly.setBirthday("1994-03-28");
            toly.setIsman(false);
    
            List<String> major = new ArrayList<String>();
            major.add("java");
            major.add("c++");
            toly.setMajor(major);
            return new JSONObject(toly).toString();
        }
    生成的json格式化后:
    {
        "age": 24,
        "birthday": "1994-03-28",
        "isman": false,
        "major": [
            "java",
            "c++"
        ],
        "name": "toly"
    }

    2.json解析

          public static Person parseJson(String json) {
            JSONObject object = new JSONObject(json);
            Person toly = new Person();
            if (!object.isNull("name")) {
                toly.setName(object.getString("name"));
            }
            if (!object.isNull("age")) {
                toly.setAge(object.getInt("age"));
            }
            if (!object.isNull("birthday")) {
                toly.setBirthday(object.getString("birthday"));
            }
            if (!object.isNull("isman")) {
                toly.setIsman(object.getBoolean("isman"));
            }
            if (!object.isNull("major")) {
                JSONArray major = object.getJSONArray("major");
                ArrayList<String> majors = new ArrayList<String>();
                for (int i = 0; i < major.length(); i++) {
                    majors.add((String) major.get(i));
                }
                toly.setMajor(majors);
            }
            return toly;
        }
    程序入口:json.Client#main
            File file = new File(Client.class.getResource("/toly.json").getFile());
            String s = FileUtils.readFileToString(file, "utf-8");
            Person toly = JsonParser.parseJson(s);
            System.out.println(toly);
    F:Intellij_ideaJavajsonsrcmainjava oly.json
    {
      "birthday": "1994-03-28",
      "major": [
        "java",
        "c++"
      ],
      "name": "toly",
      "isman": false,
      "age": 24
    }
    输出:
    Person{name='toly', birthday='1994-03-28', age=24, isman=false, major=[java, c++]}

    Gson的使用

    1.生成json

        private static String createJsonByBeanUseGson() {
            Person toly = new Person();
            toly.setAge(24);
            toly.setName("toly");
            toly.setBirthday("1994-03-28");
            toly.setIsman(false);
    
            List<String> major = new ArrayList<String>();
            major.add("java");
            major.add("c++");
            toly.setMajor(major);
            return new Gson().toJson(toly);
        }
    注:在bean对象的字段上加上 @SerializedName()注解,可自定义json键名,如:
        @SerializedName("DiaoSiName")
        private String name;
    结果格式化后:
    {
        "DiaoSiName": "toly",
        "age": 24,
        "birthday": "1994-03-28",
        "isman": false,
        "major": [
            "java",
            "c++"
        ]
    }

    2.json解析:

        private static void parseJsonUseGson() throws IOException {
            File file = new File(org_json.Client.class.getResource("/toly.json").getFile());
            String s = FileUtils.readFileToString(file, "utf-8");
            Gson gson = new Gson();
            Person person = gson.fromJson(s, Person.class);
            System.out.println(person);
        }

    控制台:

    Person{name='null', birthday='1994-03-28', age=24, isman=false, major=[java, c++]}

    3.GsonBuilder自定义构造样式

        private static String createJsonByBeanUseGson() {
            Person toly = new Person();
            toly.setAge(24);
            toly.setName("toly");
            toly.setBirthday("1994-03-28");
            toly.setIsman(false);
    
            List<String> major = new ArrayList<String>();
            major.add("java");
            major.add("c++");
            toly.setMajor(major);
    
            GsonBuilder gsonBuilder = new GsonBuilder();
            gsonBuilder.setPrettyPrinting();//使得输出的json格式化
            gsonBuilder.setFieldNamingStrategy(new FieldNamingStrategy() {
                public String translateName(Field field) {
                    if (field.getName().equals("name")) {
                        return "NAME";//更改字段名
                    }
                    return "z-"+field.getName();
                }
            });
    
            return gsonBuilder.create().toJson(toly);
        }
    控制台:
    {
      "NAME": "toly",
      "z-birthday": "1994-03-28",
      "z-age": 24,
      "z-isman": false,
      "z-major": [
        "java",
        "c++"
      ]
    }
    解析时的日期处理
        private static void parseJsonUseGsonFormateDate() throws IOException {
            File file = new File(org_json.Client.class.getResource("/toly.json").getFile());
            String s = FileUtils.readFileToString(file, "utf-8");
            Gson gson = new Gson();
            Person_Date person = gson.fromJson(s, Person_Date.class);
            System.out.println(person.getBirthday());
        }
    控制台:
    Mon Mar 28 00:00:00 CST 1994
  • 相关阅读:
    DHCP服务搭建
    JumpServer跳板机
    PXE
    DNS
    MySQL
    企业级LNMP分离式部署
    MHA-Atlas-MySQL高可用集群2
    MHA-Atlas-MySQL高可用集群
    备份全网服务器数据
    FTP
  • 原文地址:https://www.cnblogs.com/toly-top/p/9782019.html
Copyright © 2020-2023  润新知