Gson和JsonObject

本文介绍了JSON的基础概念及其在网络传输中的应用,并详细对比了多种Java中实现对象与JSON转换的技术方案,重点讲解了Gson库的使用方法及注意事项。
  1. json介绍:http://json.org/json-zh.html
    • JSON是轻量级的数据交换格式(常用于网络传输如http等);
    • 构建于两种结构:key/value;值的有序列表(数组、list等);
  2. 在java中实现对象与json的装换:Gson、JsonObject、fastjson、Jackson
    • JsonObject:  依赖较多,对于复类型的转换有缺陷;使用简单;
      • json-lib主页:http://json-lib.sourceforge.net/
      • json-lib是beans、collections、maps、java、arrays、xml与json相互转换的包;
      • JsonObject API:  http://resources.arcgis.com/en/help/arcobjects-java/api/arcobjects/com/esri/arcgis/server/json/JSONObject.html
    • Gson:https://github.com/google/gson
      • Gson可以在不注解源码的基础上使用;允许自定义对象的表现形式(驼峰式,首字母大写,下划线等)(@SerializedName);
      • Gson提供了fromJson()和toJson()两个直接用于解析和生成Json的方法,前者实现反序列化,后者实现序列化。同时每个方法都提供了重载方法;
      • @SerializedName注解:PHP和js在命名时一般采用下划线风格,Java中一般采用驼峰式,Gson在序列化和反序列化时需要使用反射(注解使用情况很多),通过@SerializedName实现json中key的表现形式(可同时存在多种形式);
      • Gson使用泛型:对于json字符串,使用Gson解析时,可以使用数组和List,而List对于增删比较方便,使用较多。
        • 使用数组
        • 		Gson gson = new Gson();
          		String jsonArray = "[\"JAVA\",\"PYTHON\",\"SHELL\"]";
          		String[] strs = gson.fromJson(jsonArray, String[].class);

  • 在使用List时,不能直接将String[].class替换为List<String>.class,因为对于java来说,存在泛型擦除,对个有着不同类型的字节码文件只有List.class。Gson提供了TypeToken来实现对泛型的支持,TypeToken的构造方法是protected。
    		Gson gson = new Gson();
    		String jsonArray = "[\"JAVA\",\"PYTHON\",\"SHELL\"]";
    		List<String> strList = gson.fromJson(jsonArray, new TypeToken<List<String>>(){}.getType());
  • 		
    		Gson gson = new Gson();
    		gson.toJson(Object);
    		gson.fromJson(Reader, Class);
    		gson.fromJson(String, Class);
    		gson.fromJson(Reader, Type);
    		gson.fromJson(String, Type);
    
    
    
    
      
      
      
      
      
      
      
      
    • 解析: http://www.jianshu.com/p/fc5c9cdf3aab(各种注解的使用);http://www.jianshu.com/p/e740196225a4
    • Gson API : http://www.javadoc.io/doc/com.google.code.gson/gson/2.8.1
                          包含以下java源文件: com.google.gson.DefaultDateTypeAdapter.class com.google.gson.ExclusionStrategy.class com.google.gson.FieldAttributes.class com.google.gson.FieldNamingPolicy.class com.google.gson.FieldNamingStrategy.class com.google.gson.Gson.class com.google.gson.GsonBuilder.class com.google.gson.InstanceCreator.class com.google.gson.JsonArray.class com.google.gson.JsonDeserializationContext.class com.google.gson.JsonDeserializer.class com.google.gson.JsonElement.class com.google.gson.JsonIOException.class com.google.gson.JsonNull.class com.google.gson.JsonObject.class com.google.gson.JsonParseException.class com.google.gson.JsonParser.class com.google.gson.JsonPrimitive.class com.google.gson.JsonSerializationContext.class com.google.gson.JsonSerializer.class com.google.gson.JsonStreamParser.class com.google.gson.JsonSyntaxException.class com.google.gson.LongSerializationPolicy.class com.google.gson.TreeTypeAdapter.class com.google.gson.TypeAdapter.class com.google.gson.TypeAdapterFactory.class com.google.gson.annotations.Expose.class com.google.gson.annotations.SerializedName.class com.google.gson.annotations.Since.class com.google.gson.annotations.Until.class com.google.gson.internal.ConstructorConstructor.class com.google.gson.internal.Excluder.class com.google.gson.internal.JsonReaderInternalAccess.class com.google.gson.internal.LazilyParsedNumber.class com.google.gson.internal.LinkedTreeMap.class com.google.gson.internal.ObjectConstructor.class com.google.gson.internal.Primitives.class com.google.gson.internal.Streams.class com.google.gson.internal.UnsafeAllocator.class com.google.gson.internal.bind.ArrayTypeAdapter.class com.google.gson.internal.bind.CollectionTypeAdapterFactory.class com.google.gson.internal.bind.DateTypeAdapter.class com.google.gson.internal.bind.JsonTreeReader.class com.google.gson.internal.bind.JsonTreeWriter.class com.google.gson.internal.bind.MapTypeAdapterFactory.class com.google.gson.internal.bind.ObjectTypeAdapter.class com.google.gson.internal.bind.ReflectiveTypeAdapterFactory.class com.google.gson.internal.bind.SqlDateTypeAdapter.class com.google.gson.internal.bind.TimeTypeAdapter.class com.google.gson.internal.bind.TypeAdapterRuntimeTypeWrapper.class com.google.gson.internal.bind.TypeAdapters.class com.google.gson.reflect.TypeToken.class com.google.gson.stream.JsonReader.class com.google.gson.stream.JsonScope.class com.google.gson.stream.JsonToken.class com.google.gson.stream.JsonWriter.class com.google.gson.stream.MalformedJsonException.class
                          评论 1
                          成就一亿技术人!
                          拼手气红包6.0元
                          还能输入1000个字符
                           
                          红包 添加红包
                          表情包 插入表情
                           条评论被折叠 查看
                          添加红包

                          请填写红包祝福语或标题

                          红包个数最小为10个

                          红包金额最低5元

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

                          抵扣说明:

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

                          余额充值