工作中,需要处理与另一方系统数据交换的问题,采用的是调用远程接口的方法,数据格式选择的是json,今天就来聊一聊json,主要分析json数据和java Bean之间的转换问题。
一、json是什么
json,全称是JavaScript Object Notation,中文翻译是JS对象标记语言,是一种轻量级的数据交换格式,易于开发人员编写和阅读,也易于机器进行生成和解析。
二、json数据结构
1、可以存储对象(Object),使用花括号 { } 包含的键值对结构,key必须是string类型,value为任何基本类型或数据结构。
2、可以存储数组(Array),使用中括号 [ ] 来起始,并用逗号 , 来分割元素。
3、可以存储String类型、number类型(整型、浮点型)、Boolean类型(true、false)和null(使用null时可以先定义一个Object为null)。
三、语法
1、普通键值对。
{"name":"小川94","age":18,"gender":"boy","hasGirlFriend":false}
2、存储对象。
{"person":{"name":"小川94","age":18,"gender":"boy","hasGirlFriend":false}}
3、存储数组。
{"name":"小川94","age":18,"gender":"boy","hasGirlFriend":false,"interest":["coding","reading"]}
4、对象加数组复合。
{"person":[{"name":"小川94_2号"},{"name":"小川94_3号"}]}
四、准备工作
1、开发系统:win7 64位。
2、开发环境:jdk1.8。
3、开发语言:java。
4、开发工具:eclipse。
5、fastjson的jar包:我使用的是maven的pom.xml文件配置
<dependency> ???<groupId>com.alibaba</groupId> ???<artifactId>fastjson</artifactId> ???<version>1.2.4</version></dependency>
五、使用阿里的 fastjson 工具包对json进行实际操作
1、将json字符串转为json对象。
1 ????/**2 ?????* 将json字符串转为json对象3 ?????* @param jsonStr json字符串4 ?????* @return5 ?????*/6 ????public static JSONObject changeStringToJson(String jsonStr){7 ????????JSONObject jo = JSON.parseObject(jsonStr);8 ????????return jo;9 ????}
2、将json字符串数组转为json数组对象。
1 ????/** 2 ?????* 将json字符串数组转为json数组对象 3 ?????* @param jsonStr json字符串 4 ?????* @return 5 ?????*/ 6 ????public static JSONArray changeStringToArray(String jsonStr){ 7 ????????JSONObject jo = JSON.parseObject(jsonStr); 8 ????????if( !jo.containsKey("person") ){ 9 ????????????return null;10 ????????}11 ????????String strArray = jo.getString("person");12 ????????JSONArray ja = JSONArray.parseArray(strArray);13 ????????return ja;14 ????}
3、将json字符串转为java Bean对象。
1 ????/**2 ?????* 将json字符串转为java Bean对象3 ?????* @param jsonStr json字符串4 ?????* @return5 ?????*/6 ????public static Person changeJsonToBean(String jsonStr){7 ????????Person person = JSON.parseObject(jsonStr, Person.class);8 ????????return person;9 ????}
4、将java Bean对象转为json对象。
1 ????/**2 ?????* 将java Bean对象转为json对象3 ?????* @param person java Bean对象4 ?????* @return5 ?????*/6 ????public static JSONObject changeBeanToJson(Person person){7 ????????JSONObject jo = (JSONObject)JSON.toJSON(person);8 ????????return jo;9 ????}
5、将json字符串转为Map。
1 ????/** 2 ?????* 将json字符串转为Map 3 ?????* @param jsonStr json字符串 4 ?????* @return 5 ?????*/ 6 ????public static Map<String,Object> changeJsonToMap(String jsonStr){ 7 ????????Map<String,Object> map = new HashMap<String,Object>(); 8 ????????JSONObject jo = JSON.parseObject(jsonStr); 9 ????????for(String str : jo.keySet()){10 ????????????map.put(str, jo.get(str));11 ????????}12 ????????return map;13 ????}
6、编写测试类。
???protected long startTime; ???protected long endTime; ???????public static final String JSON_TO_BEAN = "{" ???????????+ "‘name‘:‘小川94‘," ???????????+ "‘age‘:18," ???????????+ "‘gender‘:‘boy‘," ???????????+ "‘hasGirlFriend‘:false," ???????????+ "‘interest‘:‘coding‘" ???????????+ "}"; ???????public static String str = "{\"person\":{" ???????????+ "\"name\":\"小川94\",\"age\":18,\"gender\":\"boy\"," ???????????+ "\"hasGirlFriend\":false,\"interest\":\"coding\"}}"; ???????public static String strArray = "{\"person\":[" ???????????+ "{\"name\":\"小川94_2号\"},{\"name\":\"小川94_3号\"}]}"; ???????@Before ???public void setUp() throws Exception { ???????this.startTime= System.currentTimeMillis(); ???????System.out.println("=========开始测试==========="); ???} ???????@After ???public void tearDown() throws Exception { ???????this.endTime = System.currentTimeMillis(); ???????System.out.println("测试用时:"+(endTime-startTime)); ???????System.out.println("=========测试结束==========="); ???} ???????@Test ???public void testChangePersonToBean(){ ???????Person person = JsonUtils.changeJsonToBean(JSON_TO_BEAN); ???????System.out.println(person); ???????System.out.println("姓名:"+person.getName()); ???????System.out.println("年龄:"+person.getAge()); ???????System.out.println("性别:"+person.getGender()); ???} ???????@Test ???public void testChangeBeanToJson(){ ???????Person person = new Person(); ???????person.setName("小川94"); ???????person.setAge(18); ???????person.setGender("boy"); ???????person.setHasGirlFriend(false); ???????person.setInterest("coding"); ???????JSONObject jo = JsonUtils.changeBeanToJson(person); ???????System.out.println(jo); ???} ???????@Test ???public void testChageJsonToMap(){ ???????Map<String,Object> map = JsonUtils.changeJsonToMap(JSON_TO_BEAN); ???????System.out.println(map); ???} ???????@Test ???public void testChangeStringToJson(){ ???????JSONObject jo = JsonUtils.changeStringToJson(str); ???????System.out.println(jo); ???} ???????@Test ???public void testChangeStringToArray(){ ???????JSONArray ja = JsonUtils.changeStringToArray(strArray); ???????System.out.println(ja); ???????System.out.println(ja.get(0)); ???}
7、运行结果:上面五个测试用例都可以正常编译、运行,这里就不一一截图说明了。
文章首发于我的个人公众号:悦乐书。喜欢分享一路上听过的歌,看过的电影,读过的书,敲过的代码,深夜的沉思。期待你的关注!本博文为本人原创,转载请注明出处!
json小结和fastjson包的实际json操作
原文地址:https://www.cnblogs.com/xiaochuan94/p/8168576.html