工作中,需要处理与另一方系统数据交换的问题,采用的是调用远程接口的方法,数据格式选择的是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、开发系统:win7 64位。
2、开发环境:jdk1.8。
3、开发语言:java。
4、开发工具:eclipse。
一、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、存储对象。
{"name":"小川94","age":18,"gender":"boy","hasGirlFriend":false}
3、存储数组。
{"name":"小川94","age":18,"gender":"boy","hasGirlFriend":false,"interest":["coding","reading"]}
4、对象加数组复合。
{"name":"小川94","age":18,"gender":"boy","hasGirlFriend":false,"interest":["coding","reading"]}
四、准备工作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、构建实体类
public class Person {
public String name;
public int age;
public String gender;
public String interest;
public boolean hasGirlFriend;
public Person(){}
public Person(String name, int age, String gender, String interest, boolean hasGirlFriend) {
super();
this.name = name;
this.age = age;
this.gender = gender;
this.interest = interest;
this.hasGirlFriend = hasGirlFriend;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public String getGender() {
return gender;
}
public void setGender(String gender) {
this.gender = gender;
}
public String getInterest() {
return interest;
}
public void setInterest(String interest) {
this.interest = interest;
}
public boolean isHasGirlFriend() {
return hasGirlFriend;
}
public void setHasGirlFriend(boolean hasGirlFriend) {
this.hasGirlFriend = hasGirlFriend;
}
}
2、编写工具类。
import java.util.HashMap;
import java.util.Map;
import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
public class JsonUtils {
/**
* 将json字符串转为json对象
* @param jsonStr json字符串
* @return
*/
public static JSONObject changeStringToJson(String jsonStr){
JSONObject jo = JSON.parseObject(jsonStr);
return jo;
}
/**
* 将json字符串数组转为json数组对象
* @param jsonStr json字符串
* @return
*/
public static JSONArray changeStringToArray(String jsonStr){
JSONObject jo = JSON.parseObject(jsonStr);
if( !jo.containsKey("person") ){
return null;
}
String strArray = jo.getString("person");
JSONArray ja = JSONArray.parseArray(strArray);
return ja;
}
/**
* 将json字符串转为java Bean对象
* @param jsonStr json字符串
* @return
*/
public static Person changeJsonToBean(String jsonStr){
Person person = JSON.parseObject(jsonStr, Person.class);
return person;
}
/**
* 将java Bean对象转为json对象
* @param person java Bean对象
* @return
*/
public static JSONObject changeBeanToJson(Person person){
JSONObject jo = (JSONObject)JSON.toJSON(person);
return jo;
}
/**
* 将json字符串转为Map
* @param jsonStr json字符串
* @return
*/
public static Map<String,Object> changeJsonToMap(String jsonStr){
Map<String,Object> map = new HashMap<String,Object>();
JSONObject jo = JSON.parseObject(jsonStr);
for(String str : jo.keySet()){
map.put(str, jo.get(str));
}
return map;
}
}
3、编写测试用例。
package testDay02;
import java.util.Map;
import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import com.alibaba.fastjson.JSONArray;
import com.alibaba.fastjson.JSONObject;
import day02.JsonUtils;
import day02.Person;
import day02.ReadXml;
import junit.framework.*;
public class TestUnit01 extends TestCase {
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));
}
}
4、运行结果
=========开始测试===========
{"person":{"gender":"boy","interest":"coding","name":"小川94","hasGirlFriend":false,"age":18}}
测试用时:965
=========测试结束===========
=========开始测试===========
{"name":"小川94","gender":"boy","hasGirlFriend":false,"interest":"coding","age":18}
测试用时:118
=========测试结束===========
=========开始测试===========
[{"name":"小川94_2号"},{"name":"小川94_3号"}]
{"name":"小川94_2号"}
测试用时:5
=========测试结束===========
=========开始测试===========
day02.Person@2fc14f68
姓名:小川94
年龄:18
性别:boy
测试用时:25
=========测试结束===========
=========开始测试===========
{gender=boy, interest=coding, name=小川94, hasGirlFriend=false, age=18}
测试用时:6
=========测试结束===========
文章首发于我的个人公众号:悦乐书。喜欢分享一路上听过的歌,看过的电影,读过的书,敲过的代码,深夜的沉思。期待你的关注!