json字符串和java对象的相互转化

1、将字符串转化为java对象前,先检查字符串是否符合json格式

在线检查json格式

例子:

1)

字符串:{"id":0,"name":"team0","students":[{"id":0,"name":"student0"}]}符合json格式

2)

字符串:{"id":0,"name":"team0","students":"[{"id":0,"name":"student0"}]"}不符合json格式

2、json字符串和java对象相互的方法

2_1、使用com.google.gson

例子:

2_1_1、实体

 

package test.jsonobject;

public class Student {

	private int id;
	
	private String name;

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public Student() {
		super();
		// TODO Auto-generated constructor stub
	}

	public Student(int id, String name) {
		super();
		this.id = id;
		this.name = name;
	}

	@Override
	public String toString() {
		return "Student [id=" + id + ", name=" + name + "]";
	}
	
}

 

package test.jsonobject;

import java.util.List;

public class Team {

	private int id;
	
	private String name;
	
	private List<Student> students;

	public Team() {
		super();
		// TODO Auto-generated constructor stub
	}

	public Team(int id, String name, List<Student> students) {
		super();
		this.id = id;
		this.name = name;
		this.students = students;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public List<Student> getStudents() {
		return students;
	}

	public void setStudents(List<Student> students) {
		this.students = students;
	}

	@Override
	public String toString() {
		return "Team [id=" + id + ", name=" + name + ", students=" + students
				+ "]";
	}
	
}


2_1_2、测试类

 

 

package test.jsonobject;

import java.util.ArrayList;
import java.util.List;

import com.google.gson.Gson;
import com.google.gson.JsonArray;
import com.google.gson.JsonElement;
import com.google.gson.JsonObject;

public class GoogleGjsonTest {

	public static void main(String[] args) {
		//对象到json字符串
		Student s0 = new Student(0,"student0");
		//Student s1 = new Student(0,"student0");
		List<Student> students = new ArrayList<>();
		students.add(s0);
		//students.add(s1);
		Team team = new Team(0,"team0",students);
		Gson gson = new Gson();
		String json = gson.toJson(team);
		System.out.println(json);
		//输出结果:{"id":0,"name":"team0","students":[{"id":0,"name":"student0"},{"id":0,"name":"student0"}]}
		
		//字符串转化为对象
		String json1 = "{\"id\":0,\"name\":\"team0\",\"students\":[{\"id\":0,\"name\":\"student0\"}]}";
		System.out.println("json1:"+json1);
		Team team1 = gson.fromJson(json1, Team.class);
		System.out.println("team1:"+team1);
		
		//字符串转化我JsonObject
		JsonObject jsonObject0 = gson.fromJson(json1, JsonObject.class);
		System.out.println("jsonObject0:"+jsonObject0);
		JsonElement jsonElement0 = jsonObject0.get("id");
		System.out.println("jsonElement0:"+jsonElement0);
		JsonElement jsonElement1 = jsonObject0.get("name");
		System.out.println("jsonElement1:"+jsonElement1);
		JsonElement jsonElement2 = jsonObject0.get("students");
		System.out.println("jsonElement2:"+jsonElement2);
		JsonArray asJsonArray = jsonElement2.getAsJsonArray();
		System.out.println("asJsonArray:"+asJsonArray);
		String name = asJsonArray.get(0).getAsJsonObject().get("name").toString();
		System.out.println(name);
		
		/*
		 * {"id":0,"name":"team0","students":"[{"id":0,"name":"student0"}]"}
		 * 这个串根本不符合JSON格式,当然不能转化为对象
		 */
		/*String json2 = "{\"id\":0,\"name\":\"team0\",\"students\":\"[{\"id\":0,\"name\":\"student0\"}]\"}";
		System.out.println(json2);
		JsonObject fromJson = gson.fromJson(json2, JsonObject.class);
		System.out.println(fromJson);*/
		/*
		    Caused by: com.google.gson.stream.MalformedJsonException: Unterminated object at line 1 column 40
			at com.google.gson.stream.JsonReader.syntaxError(JsonReader.java:1505)
			at com.google.gson.stream.JsonReader.doPeek(JsonReader.java:480)
			at com.google.gson.stream.JsonReader.hasNext(JsonReader.java:403)
			at com.google.gson.internal.bind.TypeAdapters$25.read(TypeAdapters.java:666)
			at com.google.gson.internal.bind.TypeAdapters$25.read(TypeAdapters.java:642)
			at com.google.gson.Gson.fromJson(Gson.java:803)
			... 4 more
		 */
	}
}


2_2、使用net.sf.json

 

 

package test.jsonobject;

import java.util.ArrayList;
import java.util.List;

import net.sf.json.JSONArray;
import net.sf.json.JSONObject;

public class NetSfJsonTest {

	public static void main(String[] args) {
		//将对象转化为字符串
		Student s0 = new Student(0,"student0");
		List<Student> students = new ArrayList<>();
		students.add(s0);
		Team team = new Team(0,"team0",students);
		JSONObject fromObject = JSONObject.fromObject(team);
		System.out.println(fromObject.toString());
		
		//字符串转化为对象
		String json1 = "{\"id\":0,\"name\":\"team0\",\"students\":[{\"id\":0,\"name\":\"student0\"}]}";
		System.out.println("json1:"+json1);
		JSONObject fromObject2 = JSONObject.fromObject(json1);
		JSONArray jsonArray = fromObject2.getJSONArray("students");
		System.out.println(jsonArray);
		String name = (String) jsonArray.getJSONObject(0).get("name");
		System.out.println(name);
		Team bean = (Team) JSONObject.toBean(fromObject2, Team.class);
		System.out.println(bean);
	}
}

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值