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