json是轻量级数据交换类型
也可以使用阿里的fastjson.jar进行数据转换。
1.导入jar包
下载json和gson包
2.创建两个对象
package cn.newbeedaly.gson;
public class Person {
private String name;
private int age;
private String sex;
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 getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
@Override
public String toString() {
return "Person [name=" + name + ", age=" + age + ", sex=" + sex + "]";
}
}
package cn.newbeedaly.gson;
/**
* 严格遵守Bean规则的类
*
* 1. 所有属性必须私有
* 2. 所有属性必须拥有get,set方法
* 3. 必须存在无参构造器
*/
public class Message {
private int messageId;
private String fromUser;
private String toUser;
private String messageContext ;
private String createTime;
public int getMessageId() {
return messageId;
}
public void setMessageId(int messageId) {
this.messageId = messageId;
}
public String getFromUser() {
return fromUser;
}
public void setFromUser(String fromUser) {
this.fromUser = fromUser;
}
public String getToUser() {
return toUser;
}
public void setToUser(String toUser) {
this.toUser = toUser;
}
public String getMessageContext() {
return messageContext;
}
public void setMessageContext(String messageContext) {
this.messageContext = messageContext;
}
public String getCreateTime() {
return createTime;
}
public void setCreateTime(String createTime) {
this.createTime = createTime;
}
public Message() {
super();
// TODO Auto-generated constructor stub
}
}
3.对象转为json字符串
package cn.newbeedaly.gson;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.Map;
import org.junit.Test;
import com.google.gson.Gson;
/**
* CSDN下载
*
* GSON 生成 json字符串
*
* 将一个对象转换为JSON格式
*/
public class GSONDemo {
@Test
public void gsonTest1() throws Exception {
Person p = new Person();
p.setName("张统");
p.setSex("不详");
p.setAge(8);
//创建一个Gson对象
Gson g = new Gson();
String jsonStr = g.toJson(p);
System.out.println(jsonStr);
System.out.println("------------------");
String[] arr = {"张三","李四","王二","麻子","张统"};
jsonStr = g.toJson(arr);
System.out.println(jsonStr);
System.out.println("------------------");
ArrayList<String> list = new ArrayList<String>();
for (int i = 0; i < 30; i++) {
list.add("item"+i);
}
jsonStr = g.toJson(list);
System.out.println(jsonStr);
System.out.println("------------------");
Map<String,Object> map = new HashMap<String,Object>();
map.put("id", 10001);
map.put("person", p);
map.put("arr", arr);
jsonStr = g.toJson(map);
System.out.println(jsonStr);
}
/**
* Gson
* 1. 将一个对象转换为JSON格式字符串
* String jsonStr = new Gson().toJson(obj);
* 2. 将一个JSON格式字符串转换为对象
* Map<String,String> map = new Gson().fromJson(jsonStr,HashMap.class);
* Person p = new Gson().fromJson(jsonStr,Person.class);
* ArrayList p = new Gson().fromJson(jsonStr,ArrayList.class);
*
*/
@Test
public void gsonTest2(){
Gson g = new Gson();
String personJsonStr = "{\"name\":\"张统\",\"age\":8,\"sex\":\"不详\"}";
Person p = g.fromJson(personJsonStr, Person.class);
System.out.println(p.toString());
System.out.println("------------");
String arrJsonStr = "[\"张三\",\"李四\",\"王二\",\"麻子\",\"张统\"]";
ArrayList<String> list = g.fromJson(arrJsonStr, ArrayList.class);
for (int i = 0; i < list.size(); i++) {
System.out.print("-->"+list.get(i));
}
System.out.println();
System.out.println("-----------");
String arrJsonStr2 = "[\"item0\",\"item1\",\"item2\",\"item3\",\"item4\",\"item5\",\"item6\",\"item7\",\"item8\",\"item9\",\"item10\",\"item11\",\"item12\",\"item13\",\"item14\",\"item15\",\"item16\",\"item17\",\"item18\",\"item19\",\"item20\",\"item21\",\"item22\",\"item23\",\"item24\",\"item25\",\"item26\",\"item27\",\"item28\",\"item29\"]";
ArrayList<String> list2 = g.fromJson(arrJsonStr2, ArrayList.class);
for (int i = 0; i < list2.size(); i++) {
System.out.print("-->"+list2.get(i));
}
System.out.println();
System.out.println("-----------");
String mapJsonStr = "{\"arr\":[\"张三\",\"李四\",\"王二\",\"麻子\",\"张统\"],\"person\":{\"name\":\"张统\",\"age\":8,\"sex\":\"不详\"},\"id\":10001}";
HashMap<String,Object> map = g.fromJson(mapJsonStr, HashMap.class);
System.out.println(map.get("id"));
ArrayList<String> list3 = g.fromJson(map.get("arr").toString(), ArrayList.class);
for (int i = 0; i < list3.size(); i++) {
System.out.print("-->"+list3.get(i));
}
System.out.println();
System.out.println("-----------");
Person p2 = g.fromJson(map.get("person").toString(), Person.class);
System.out.println(p2);
}
}
4.json字符串转为对象
package cn.newbeedaly.json;
import static org.junit.Assert.*;
import java.util.HashMap;
import java.util.Map;
import org.json.JSONArray;
import org.json.JSONObject;
import org.json.JSONTokener;
import org.junit.Test;
public class JSONDemo {
@Test
public void jsonTest1() throws Exception {
// 描述注册
// String jsonStr = "{\"responseCode\":200,\"message\":\"用户注册成功\"}";
//描述聊天
String jsonStr = "{\"responseCode\":200,\"message\":{\"messageId\":10002,\"toUser\":\"健康\",\"formUser\":\"张统\",\"messageContent\":\"爱老虎油\"},\"arr\":[\"哈哈\",\"呵呵\",\"嘿嘿\",\"嘻嘻\"]}";
System.out.println(jsonStr);
//将JSON字符串 转换为JSON对象
JSONObject obj = new JSONObject(jsonStr);
//通过key , 获取JSON对象中的int属性值
int code = obj.getInt("responseCode");
System.out.println(code);
//通过key , 获取JSON对象中的String属性值
//String message = obj.getString("message");
//System.out.println(message);
JSONObject message = obj.getJSONObject("message");
System.out.println(message.getString("formUser")+"对"+message.getString("toUser")+"说:"+message.getString("messageContent"));
System.out.println("------------------------------------------");
JSONArray arr = obj.getJSONArray("arr");
for (int i = 0; i < arr.length(); i++) {
System.out.println(i+":"+arr.get(i));
}
}
@Test
public void jsonTest2(){
Map<String,Object> map = new HashMap<String,Object>();
map.put("uname", "张三");
map.put("upass", "123456");
map.put("uid", 10001);
JSONObject obj = new JSONObject(map);
String jsonStr = obj.toString();
System.out.println(jsonStr);
}
}
Gson.jar
Gson一切通过对象进行工作
Gson g = new Gson();
g.toJson(对象); -- 将对象转换JSON字符串
g.fromJson(字符串,类类型); -- 将字符串转换成对应的类
Json转为集合时注意
不能传入简单的类类型,必须指定该泛型
错误:
g.fromJson(字符串,List.class);
正确:
g.fromJson("字符串",new TypeToKen<List<Person>(){}.getType());
Gson对于JSON数组的转换
错误操作
LinkedTreeMap map = g.fromJson("字符串",List.class);
只能返回这样的类型。这样会影响原有的获取方式
正常操作
封装方法
public static <T> List<T> fromJsonArray(String json, java.lang.Class<T> clazz) {
List<T> list = new ArrayList<T>();
JsonArray array = new JsonParser().parse(json).getAsJsonArray();
for (final JsonElement elem : array) {
list.add(new Gson().fromJson(elem, clazz));
}
return list;
}
进行调用
List<? extends Object> list = fomJsonArray(字符串,List中存放的对象的类类型);
格式
JSONObject {“”:””,......””:[],......””:{},......””:[{},......a,b,c],......””:{“”:””,......}}
JSONArray [“a”,”b”,”c”,......[1,2,3],......{“”:””,......},......]
js中JSON和String的转换
1 通过eval函数转换
2 通过JSON.parse()转换
-- 获取值的方式直接.key即可
java解析与生成 - JSON.jar
生成:
new JSONObject(对象).toString(); -- 转换为JSON的字符串
new JSONObject(字符串); -- 转换为JSONObject的对象
解析:
如果存在嵌套,必须先解析外层才能解析内层
JSONObject:
jsonObj.getInt(key); -- 获取int成员
jsonObj.getString(key); -- 获取String成员
jsonObj.getJSONObject(key); -- 获取子对象
jsonObj.getJSONArray(key); -- 获取子数组
JSONArray:
jsonArr.getInt(index); -- 获取int成员
jsonArr.getString(index); -- 获取String成员
jsonArr.getJSONObject(index); -- 获取子对象
jsonArr.getJSONArray(index); -- 获取子数组