工作中,需要处理与另一方系统数据交换的问题,采用的是调用远程接口的方法,数据格式选择的是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 * @return 5 */ 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 * @return 5 */ 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 * @return 5 */ 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、运行结果:上面五个测试用例都可以正常编译、运行,这里就不一一截图说明了。
文章首发于我的个人公众号:悦乐书。喜欢分享一路上听过的歌,看过的电影,读过的书,敲过的代码,深夜的沉思。期待你的关注!本博文为本人原创,转载请注明出处!
原文地址:https://www.cnblogs.com/xiaochuan94/p/8168576.html