Json数据类型与Java数据类型的关系 三

Json数据类型与Java数据类型的关系

首先要清晰java中字符串的表示,是将字符串用""(双引号)括起来。双引号里面为字符串的内容。
特殊字符需要转义。而Json本身就是一堆字符串。

所以java中表示json字符串应该如
String i = "json字符串"

如:
Json数字:123
java表示: String i="123";

Json字符串:"123"
java表示:String i="\"123\"";

总结:千万别混淆: json字符串"abc",在java中表示为String i="\"abc\"",而不是String i="abc"。

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.JsonParser;
import com.google.gson.JsonPrimitive;

/**
 * 一、4种基本类型 
 * 1.字符串(Strings) 如:"a"			类型:JsonPrimitive
 * 2.数字(numbers) 如:1,1.02		类型:JsonPrimitive
 * 3.布尔型(booleans) true false 	类型:JsonPrimitive
 * 4.Null值(null)  null				类型:JsonNull
 * 
 * 二、两种结构类型 
 * 1.对象 {"name":"zhangsan","age":18}	键为String,值为Json的任意数据类型之一。
 * 	  对象的键值对是无序的。			类型:JsonObject 
 * 2.数组 [1,2,3]	顺序排列的零个或多个Json数据类型	 类型:JsonArray
 * 
 */
public class JsonTest {

	//下面为Java字符串转换成json的两种可能
	public static void main(String[] args) {
		Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();
		//java字符串
		String i="123";
		
		
		//1.----Java字符串序列化为json
		//输出json串 "123"
		JsonPrimitive jsonPrimitive = new JsonPrimitive(i);
		System.out.println(jsonPrimitive.toString());
		
		//2.----Java字符串序列化为json
		//输出json串 123
		System.out.println(new JsonParser().parse(i).toString());
		
		
		/*为什么java字符串  i="123"  序列化为json串,会有两种不同的结果呢?
		 * 
		 * 情形一: 是将Java String类型 转换为对应的Json基本数据类型字符串。 所以输出"123"
		 * 情形二: 是将Java String字符串被当作Json串,进行了解析。所以 i="123" 实际代表json串123。所以输出为123,即json数字类型。
		 * */
		
		
		//将i的值修改,前面加个英文字符
		i="L123";
		//1.----Java字符串序列化为json
		//输出json串"L123"
		JsonPrimitive jsonPrimitive2 = new JsonPrimitive(i);
		System.out.println(jsonPrimitive2.toString());
		
		//2.----Java字符串序列化为json
		//输出json串"L123"
		System.out.println(new JsonParser().parse(i).toString());
		
		/*现在输出的结果都为 "L123" ,为什么?
		 * 
		 * 情形一:同上
		 * 情形二: 是将Java String字符串被当作Json串,进行了解析。
		 * 所以 i="L123" 实际代表json串L123。而L123 即不是数字,又不是字符串(字符串应为为"L123"),不是合法的Json格式。确将它合法化为Json字符串
		 * 如果i="\"L123",才抛出Json语法错误异常
		 * */
	}
}

这里解析Json都用的是Google的Gson

原文地址:https://www.cnblogs.com/beenupper/p/2680177.html