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
浙公网安备 33010602011771号