【数据解析入门系列】-初探Json
定义
JSON是一种轻量级的数据交换格式,采用完全独立于编程语言的文本格式来存储和表示数据。简洁和清晰的层次结构使得 JSON 成为理想的数据交换语言。 易于阅读和编写,同时也易于解析和生成,并有效地提升网络传输效率。
语法
数据在名称/值对中
数据由逗号分隔
花括号保存对象
方括号保存数组
{ "employees": [ { "firstName":"John" , "lastName":"Doe" }, { "firstName":"Anna" , "lastName":"Smith" }, { "firstName":"Peter" , "lastName":"Jones" } ] }
实例分析
public static void jsonChange() throws IOException { /** * 方式1:传统方式 org.json * Json数据转换成实体对象存在缺陷,性能和功能不够完善 */ // JSONObject/JSONArray与String相互转换 String jsonStr = "{\"age\":25,\"name\":\"小明\",\"sex\":\"男\"}"; JSONObject jsonObject = new JSONObject(jsonStr); System.out.println("name="+jsonObject.getString("name")); System.out.println("age="+jsonObject.getInt("age")); System.out.println("sex="+jsonObject.getString("sex")); System.out.println(jsonObject.toString()); jsonStr = "[{\"age\":25,\"name\":\"小明\",\"sex\":\"男\"},{\"age\":20,\"name\":\"小红\",\"sex\":\"女\"}]"; JSONArray jsonArray = new JSONArray(jsonStr); System.out.println(jsonArray.toString()); for (int i=0; i<jsonArray.length();i++){ jsonObject = (JSONObject) jsonArray.get(i); System.out.println(jsonObject.toString()); } // 对象转JSONObject/JSONArray(org.json是不支持JSONObject/JSONArray转对象) jsonObject = new JSONObject(new Person("小明",25,"男")); System.out.println(jsonObject); List<Person> list = new ArrayList<>(); list.add(new Person("小明",25,"男")); jsonArray = new JSONArray(list); System.out.println(jsonArray.toString()); /** * 方式2:fastjson * 复杂的实体类转换成Json数据存在缺陷,解析json的速度最优 */ // String转对象 jsonStr = "{\"age\":25,\"name\":\"小明\",\"sex\":\"男\"}"; Person person = JSON.parseObject(jsonStr,Person.class); System.out.println(person.toString()); jsonStr = "[{\"age\":25,\"name\":\"小明\",\"sex\":\"男\"},{\"age\":20,\"name\":\"小红\",\"sex\":\"女\"}]"; list = JSON.parseArray(jsonStr,Person.class); System.out.println(list.toString()); // 对象转String jsonStr = JSON.toJSONString(person); System.out.println(jsonStr); jsonStr = JSON.toJSONString(list); System.out.println(jsonStr); /** * 方式3:Jackson * 复杂的Json数据转换成实体类存在缺陷,性能和功能优于传统方式 */ // String转对象 ObjectMapper mapper=new ObjectMapper(); jsonStr = "{\"age\":25,\"name\":\"小明\",\"sex\":\"男\"}"; person = mapper.readValue(jsonStr, Person.class); System.out.println(person.toString()); jsonStr = "[{\"age\":25,\"name\":\"小明\",\"sex\":\"男\"},{\"age\":20,\"name\":\"小红\",\"sex\":\"女\"}]"; list = mapper.readValue(jsonStr,mapper.getTypeFactory().constructParametricType(ArrayList.class, Person.class)); System.out.println(list.toString()); // 对象转String jsonStr = mapper.writeValueAsString(person); System.out.println(jsonStr); jsonStr = mapper.writeValueAsString(list); System.out.println(jsonStr); /** * 方式4:Gson * 功能方面在几种方式中最优,性能方面不如Jackson方式 */ // String转对象 String json = "{\"age\":25,\"name\":\"小明\",\"sex\":\"男\"}"; Gson gson = new Gson(); person = gson.fromJson(json,Person.class); System.out.println(person.toString()); json = "[{\"age\":25,\"name\":\"小明\",\"sex\":\"男\"},{\"age\":20,\"name\":\"小红\",\"sex\":\"女\"}]"; list = gson.fromJson(json,new TypeToken<ArrayList<Person>>(){}.getType()); System.out.println(list.toString()); // 对象转String json = gson.toJson(person); System.out.println(json); json = gson.toJson(list); System.out.println(json); }
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步