java谷歌jsonview插件下载插件怎么用

3115人阅读
从谷歌上搜罗滴:
Gson is a Java library that can be used to convert Java Objects into their JSON representation. It can also be used to convert a JSON string to an equivalent Java object. Gson is an open-source project hosted at&.
Gson can work with arbitrary Java objects including pre-existing objects that you do not have source-code of.
Goals for Gson
Provide easy to use mechanisms like&toString()&and constructor (factory method) to convert Java to JSON and vice-versaAllow pre-existing unmodifiable objects to be converted to and from JSONAllow custom representations for objectsSupport arbitrarily complex objectGenerate compact and readability JSON output
Gson Performance and Scalability
Here are some metrics that we obtained on a desktop (dual opteron, 8GB RAM, 64-bit Ubuntu) running lots of other things along-with the tests. You can rerun these tests by using the class.
Strings: Deserialized strings of over 25MB without any problems (see&disabled_testStringDeserializationPerformance&method in&PerformanceTest)
Large collections:&
Serialized a collection of 1.4 million objects (see&disabled_testLargeCollectionSerialization&method in&PerformanceTest)
Deserialized a collection of 87,000 objects (see&disabled_testLargeCollectionDeserialization&in&PerformanceTest)
Gson 1.4 raised the deserialization limit for byte arrays and collection to over 11MB from 80KB.
Note: Delete the&disabled_&prefix to run these tests. We use this prefix to prevent running these tests every time we run junit tests.
Gson Users
Gson was originally created for use inside Google where it is currently used in a number of projects. It is now used by a number of public projects and companies. See details&.
Using Gson
The primary class to use is&&which you can just create by calling new Gson(). There
is also a class&&available that can be used to create a Gson
instance with various settings like version control and so on.&
The Gson instance does not maintain any state while invoking Json operations. So, you are free to reuse the same object for multiple Json serialization and deserialization operations.
Primitives Examples
(Serialization)
Gson gson = new Gson();
gson.toJson(1);&&&&&&&&&&&&==& prints 1
gson.toJson(&abcd&);&& & &&==& prints &abcd&
gson.toJson(new Long(10));&==& prints 10
int[] values = { 1 };
gson.toJson(values);&&&&&&&==& prints [1]
(Deserialization)
int one =&gson.fromJson(&1&,&int.class);
Integer one = gson.fromJson(&1&, Integer.class);
Long one =&gson.fromJson(&1&,&Long.class);
Boolean false =&gson.fromJson(&false&,&Boolean.class);
String str =&gson.fromJson(&\&abc\&&,&String.class);
String anotherStr =&gson.fromJson(&[\&abc\&]&,&String.class);
Object Examples
class BagOfPrimitives {
& private int value1 = 1;
& private String value2 = &abc&;
& private&transient&int value3 = 3;
& BagOfPrimitives() {
&&& // no-args constructor
(Serialization)
BagOfPrimitives obj = new BagOfPrimitives();
Gson&gson&= new&Gson();
String json = gson.toJson(obj);&&
==& json is {&value1&:1,&value2&:&abc&}
Note that you can not serialize objects with circular references since that will result in infinite recursion.&
(Deserialization)
BagOfPrimitives obj2 =&gson.fromJson(json,&BagOfPrimitives.class);&&&
==& obj2 is just like obj
Finer Points with Objects
It is perfectly fine (and recommended) to use private fields&
There is no need to use any annotations to indicate a field is to be included for serialization and deserialization. All fields in the current class (and from all super classes) are included by default.&
If a field is marked transient, (by default) it is ignored and not included in the JSON serialization or deserialization.
This implementation handles nulls correctly
While serialization, a null field is skipped from the outputWhile deserialization, a missing entry in JSON results in setting the corresponding field in the object to null
If a field is&synthetic, it is ignored and not included in JSON serialization or deserialization
Fields corresponding to the outer classes in& inner classes, anonymous classes, and local classes are ignored and not included in serialization or deserialization
Nested Classes (including Inner Classes)
Gson can serialize static nested classes quite easily.&
Gson can also deserialize static nested classes. However, Gson can&not&automatically deserialize the&pure inner classes since their no-args constructor also need a reference to the containing Object&which is not available
at the time of deserialization. You can address this problem by either making the inner class static or by providing a custom InstanceCreator for it. Here is an example:&
public class A {&
&&public S&
&&class B {&
&& &public S&
&& &public B() {
&& & &// No args constructor for B
NOTE: The above class B can not (by default) be serialized with Gson.
Gson&can&not&deserialize&{&b&:&abc&}&into
an instance of B since the class B is an inner class. if it was defined as&static class B&then Gson would have been able to deserialize the string. Another
solution is to write a custom instance creator for B.&
public class InstanceCreatorForB implements InstanceCreator&A.B& {
&&private final A
&&public InstanceCreatorForB(A a) &{
&& &this.a =
&&public A.B createInstance(Type type) {
&& &return a.new B();
The above is possible, but not recommended.
Array Examples
Gson&gson&= new&Gson();
int[] ints = {1, 2, 3, 4, 5};
String[] strings = {&abc&, &def&, &ghi&};
(Serialization)
gson.toJson(ints);&&&&&==& prints [1,2,3,4,5]
gson.toJson(strings);&&==& prints [&abc&, &def&, &ghi&]
(Deserialization)
int[] ints2 =&gson.fromJson(&[1,2,3,4,5]&,&int[].class);&
==& ints2 will be same as ints
We also support multi-dimensional arrays, with arbitrarily complex element types
Collections Examples
Gson&gson&= new Gson();
Collection&Integer& ints = Lists.immutableList(1,2,3,4,5);
(Serialization)
String json =&gson.toJson(ints);&==&
json is [1,2,3,4,5]
(Deserialization)
Type collectionType = new TypeToken&Collection&Integer&&(){}.getType();
Collection&Integer& ints2 =&gson.fromJson(json, collectionType);
ints2 is same as ints
Fairly hideous: note how we define the type of collection
Unfortunately, no way to get around this in Java
Collections Limitations
Can serialize collection of arbitrary objects but can not deserialize from it
Because there is no way for the user to indicate the type of the resulting object
While deserializing, Collection must be of a specific generic type
All of this makes sense, and is rarely a problem when following good Java coding practices
Serializing and Deserializing Generic Types
When you call&toJson(obj), Gson calls&obj.getClass()&to get information on the fields to serialize. Similarly, you can typically pass&MyClass.class&object
in the&fromJson(json, MyClass.class)&method. This works fine if the object is a non-generic type. However, if the object is of a generic type, then the Generic type information is lost because of Java
Type Erasure. Here is an example illustrating the point:&
class Foo&T& {
Gson gson = new Gson();
Foo&Bar& foo = new Foo&Bar&();
gson.toJson(foo); // May not serialize foo.value correctly
gson.fromJson(json, foo.getClass()); // Fails to deserialize foo.value as Bar
The above code fails to interpret value as type Bar because Gson invokes&list.getClass()&to get its class information, but this method returns a raw class,&Foo.class.
This means that Gson has no way of knowing that this is an object of type Foo&Bar&, and not just plain Foo.&
You can solve this problem by specifying the correct parameterized type for your generic type. You can do this by using the&&class.&
Type fooType = new TypeToken&Foo&Bar&&() {}.getType();
gson.toJson(foo, fooType);
gson.fromJson(json, fooType);
The idiom used to get&fooType&actually defines an anonymous local inner class containing a method&getType()&that returns the fully parameterized
Serializing and Deserializing Collection with Objects of Arbitrary Types
Sometimes you are dealing with JSON array that contains mixed types. For example:
['hello',5,{name:'GREETINGS',source:'guest'}]
The equivalent Collection containing this is:
Collection collection = new ArrayList();
collection.add(&hello&);
collection.add(5);
collection.add(new Event(&GREETINGS&, &guest&));
Where the Event class is defined as:
class Event {
& private S
& private S
& private Event(String name, String source) {
& & this.name =
& & this.source =
You can serialize the collection with Gson without doing anything specific:&toJson(collection)&would write out the desired output.
However, deserialization with&fromJson(json, Collection.class)&will not work since Gson has no way of knowing how to map the input to the types. Gson requires that you provide a genericised version of collection type
in fromJson. So, you have three options:
Option 1:&Use Gson's parser API (low-level streaming parser or the DOM parser JsonParser) to parse the array elements and then &use Gson.fromJson() on each of the array elements.This is the preferred approach.&&that demonstrates how to do this.
Option 2:&Register a type adapter for Collection.class that looks at each of the array members and maps them to appropriate objects. The disadvantage of this approach is that it will screw up deserialization of other collection types in
Option 3: Register a type adapter for MyCollectionMemberType and use fromJson with Collection&MyCollectionMemberType&
This approach is practical only if the array appears as a top-level element or if you can change the field type holding the collection to be of type Collection&MyCollectionMemberTyep&.&
Built-in Serializers and Deserializers
Gson has built-in serializers and deserializers for commonly used classes whose default representation may be inappropriate.&
Here is a list of such classes:&
java.net.URL to match it with strings like &/p/google-gson/&.java.net.URI to match it with strings like &/p/google-gson/&.
You can also find source-code for some commonly used classes such as JodaTime at&.
Custom Serialization and Deserialization
Sometimes default representation is not what you want. This is often the case when dealing with library classes (DateTime, etc).&
Gson allows you to register your own custom serializers and deserializers. This is done by defining two parts:&
Json Serialiers: Need to define custom serialization for an objectJson Deserializers: Needed to define custom deserialization for a type
Instance Creators: Not needed if no-args constructor is available or a deserializer is registered
GsonBuilder gson = new GsonBuilder();
gson.registerTypeAdapter(MyType2.class, new MyTypeAdapter());
gson.registerTypeAdapter(MyType.class, new MySerializer());
gson.registerTypeAdapter(MyType.class, new MyDeserializer());
gson.registerTypeAdapter(MyType.class, new MyInstanceCreator());
registerTypeAdapter call checks if the type adapter implements more than one of these interfaces and register it for all of them.
Writing a Serializer
Here is an example of how to write a custom serializer for JodaTime DateTime class.&
private class DateTimeSerializer implements JsonSerializer&DateTime& {
& public JsonElement serialize(DateTime src, Type typeOfSrc, JsonSerializationContext context) {
&& &return new JsonPrimitive(src.toString());
Gson calls toJson() when it runs into a DateTime&object during serialization.
Writing a Deserializer
Here is an example of how to write a custom deserializer for JodaTime DateTime class.&
private class DateTimeDeserializer implements JsonDeserializer&DateTime& {
& public&DateTime&deserialize(JsonElement json, Type typeOfT, JsonDeserializationContext context)
&&&&& throws JsonParseException {
&&& return new DateTime(json.getAsJsonPrimitive().getAsString());
Gson calls fromJson() when it needs to deserialize a JSON string fragment into a DateTime object
Finer points with Serializers and Deserializers
Often you want to register a single handler for all generic types corresponding to a raw type
For example, suppose you have an &Id& class for Id representation/translation (i.e. an internal vs. external representation).Id&T& type that has same serialization for all generic types&
Essentially write out the id value
Deserialization is very similar but not exactly the same
Need to call&&new Id(Class&T&, String)&&which returns an instance of Id&T&
Gson supports registering a single handler for this. You can also register a specific handler for a specific generic type (say&Id&RequiresSpecialHandling&&needed special handling).
The&Type&parameter for the&toJson&and&fromJson&contains the generic type information to
help you write a single handler for all generic types corresponding to the same raw type
Writing an Instance Creator
While deserializing an Object, Gson needs to create a default instance of the class
Well-behaved& classes that are meant for serialization and deserialization should have a no-argument constructor
Doesn't matter whether public or private
Typically, Instance Creators are needed when you are dealing with a library class that does NOT define a no-argument constructor
Instance Creator Example
private class MoneyInstanceCreator implements InstanceCreator&Money& {
& public Money createInstance(Type type) {
&&& return new Money(&1000000&, CurrencyCode.USD);
Type could be of a corresponding generic type
Very useful to invoke constructors which need specific generic type informationFor example, if the&Id&class stores the class for which the Id is being created
InstanceCreator for a Parameterized Type
Sometimes that the type that you are trying to instantiate is a parameterized type. Generally, this is not a problem since the actual instance is of raw type. Here is an example:&
class MyList&T& extends ArrayList&T& {
class MyListInstanceCreator implements InstanceCreator&MyList&?&& {
&&& @SuppressWarnings(&unchecked&)
& public MyList&?& createInstance(Type type) {
&&& // No need to use a parameterized list since the actual instance will have the raw type anyway.
&&& return new MyList();
However, sometimes you do need to create instance based on the actual parameterized type. In this case, you can use the type parameter being passed to the&createInstance&method. Here is an example:&
public class Id&T& {
& private final Class&T& classOfId;
& public Id(Class&T& classOfId, long value) {
&&& this.classOfId = classOfId;
&&& this.value =
class IdInstanceCreator implements InstanceCreator&Id&?&& {
& public Id&?& createInstance(Type type) {
&&& Type[] typeParameters = ((ParameterizedType)type).getActualTypeArguments();
&&& Type idType = typeParameters[0]; // Id has only one parameterized type T
&&& return Id.get((Class)idType, 0L);
In the above example, an instance of the Id class can not be created without actually passing in the actual type for the parameterized type. We solve this problem by using the passed method parameter,&type.
The&type&object in this case is the Java parameterized type representation of&Id&Foo&&where the actual instance should be bound to&Id&Foo&.
Since&Id&class has just one parameterized type parameter,&T, we use the zeroth element of the type array returned by&getActualTypeArgument()&which
will hold&Foo.class&in this case.
Compact Vs. Pretty Printing for JSON Output Format
The default JSON output that is provide by Gson is a compact JSON format.& This means that there will not be any whitespace in the output JSON structure.& Therefore, there will be no whitespace between field names and its value, object fields, and objects within
arrays in the JSON output.& As well, &null& fields will be ignored in the output (NOTE: null values will still be included in collections/arrays of objects).& See the&&section for information on configure Gson to output all null values.
If you like to use the Pretty Print feature, you must configure your&Gson&instance using the&GsonBuilder.& The&JsonFormatter&
is not exposed through our public API, so the client is unable to configure the default print settings/margins for the JSON output.& For now, we only provide a default&JsonPrintFormatter&that has default
line length of 80 character, 2 character indentation, and 4 character right margin.
The following is an example shows how to configure a&Gson&instance to use the default&JsonPrintFormatter&instead of the&JsonCompactFormatter:
Gson gson = new GsonBuilder().setPrettyPrinting().create();
String jsonOutput = gson.toJson(someObject);
Null Object Support
The default behaviour that is implemented in Gson is that&null&object fields are ignored.& This allows for a more c however, the client must define a default value for these fields
as the JSON format is converted back into its Java.
Here's how you would configure a&Gson&instance to output null:
Gson gson = new GsonBuilder().serializeNulls().create();
NOTE: when serializing&nulls with Gson, it will add a&JsonNull&element to the&JsonElement&structure.&
Therefore, this object can be used in custom serialization/deserialization.
Here's an example:
public class Foo {
& private final S
& public Foo() {
&&& this(null, 5);
& public Foo(String s, int i) {
&&& this.s =
&&& this.i =
Gson gson = new GsonBuilder().serializeNulls().create();
Foo foo = new Foo();
String json = gson.toJson(foo);
System.out.println(json);
json = gson.toJson(null);
System.out.println(json);
======== OUTPUT ========
{&s&:null,&i&:5}
Versioning Support
Multiple versions of the same object can be maintained by using&&annotation.
This annotation can be used on Classes, Fields and, in a future release, Methods.& In order to leverage this feature, you must configure your&Gson&instance to ignore any field/object that is greater
than some version number.& If no version is set on the&Gson&instance then it will serialize and deserialize all fields and classes regardless of the version.
public class VersionedClass {
& @Since(1.1) private final String newerF
&&@Since(1.0)&private final String newF
& private final S
& public VersionedClass() {
&&& this.newerField = &newer&;
&&& this.newField = &new&;
&&& this.field = &old&;
VersionedClass versionedObject = new VersionedClass();
Gson gson = new GsonBuilder().setVersion(1.0).create();
String jsonOutput = gson.toJson(someObject);
System.out.println(jsonOutput);
System.out.println();
gson = new Gson();
jsonOutput = gson.toJson(someObject);
System.out.println(jsonOutput);
======== OUTPUT ========
{&newField&:&new&,&field&:&old&}
{&newerField&:&newer&,&newField&:&new&,&field&:&old&}
Excluding Fields From Serialization and Deserialization
Gson&supports numerous mechanisms for excluding top-level classes, fields and field types.& Below are pluggable mechanism that allow field and class exclusion. If none of the below mechanism satisfy your needs then you can always use&.
Java Modifier Exclusion
By default, if you mark a field as&transient, it will be excluded.& As well, if a field is marked as &static& then by default it will be excluded. If you want to include some transient fields then you
can do the following:
import java.lang.reflect.M
Gson gson = new GsonBuilder()
&&& .excludeFieldsWithModifiers(Modifier.STATIC)
&&& .create();
NOTE: you can use any number of the&Modifier&constants to &excludeFieldsWithModifiers& method.& For example:
Gson gson = new GsonBuilder()
&&& .excludeFieldsWithModifiers(Modifier.STATIC, Modifier.TRANSIENT, Modifier.VOLATILE)
&&& .create();
Gson's @Expose
This feature provides a way where you can mark certain fields of your objects to be excluded for consideration for serialization and deserialization to JSON. To use this annotation, you must create Gson by using&new
GsonBuilder().excludeFieldsWithoutExposeAnnotation().create(). The Gson instance created will exclude all fields in a class that are not marked with&@Exposeannotation.
User Defined Exclusion Strategies
If the above mechanisms for excluding fields and class type do not work for you then you can always write your own exclusion strategy and plug it into Gson. See the&&JavaDoc
for more information.
The following example shows how to exclude fields marked with a specific &@Foo& annotation and excludes top-level types (or declared field type) of class String.
& @Retention(RetentionPolicy.RUNTIME)
& @Target({ElementType.FIELD})
& public @interface Foo {
&&& // Field tag only annotation
&&public class SampleObjectForTest {
&&& @Foo&private final int annotatedF
&&& private final String stringF
&&& private final long longF
&&& private final Class&?& clazzF
&&& public SampleObjectForTest() {
&&&&& annotatedField = 5;
&&&&& stringField = &someDefaultValue&;
&&&&& longField = 1234;
& public class MyExclusionStrategy implements ExclusionStrategy {
&&& private final Class&?& typeToS
&&& private MyExclusionStrategy(Class&?& typeToSkip) {
&&&&& this.typeToSkip = typeToS
&&& public boolean shouldSkipClass(Class&?& clazz) {
&&&&& return (clazz == typeToSkip);
&&& public boolean shouldSkipField(FieldAttributes f) {
&&&&& return f.getAnnotation(Foo.class) !=
& public static void main(String[] args) {
&&& Gson gson = new GsonBuilder()
&&&&&&& .setExclusionStrategies(new MyExclusionStrategy(String.class))
&&&&&&& .serializeNulls()
&&&&&&& .create();
&&&&SampleObjectForTest&src = new SampleObjectForTest();
&&& String json = gson.toJson(src);
&&& System.out.println(json);
======== OUTPUT ========
{&longField&:1234}
JSON Field Naming Support
Gson supports some pre-defined field naming policies to convert the standard Java field names (i.e. camel cased names starting with lower case --- &sampleFieldNameInJava&) to a Json field name (i.e. sample_field_name_in_java or SampleFieldNameInJava). See the&&class
for information on the pre-defined naming policies.
It also has an annotation based strategy to allows clients to define custom names on a per field basis.& Note, that the annotation based strategy has field name validation which will raise &Runtime& exceptions if an invalid field name is provided as the annotation
The following is an example of how to use both Gson naming policy features:
private class SomeObject {
& @SerializedName(&custom_naming&) private final String someF
& private final String someOtherF
& public SomeObject(String a, String b) {
&&& this.someField =
&&& this.someOtherField =
SomeObject someObject = new SomeObject(&first&, &second&);
Gson gson = new GsonBuilder().setFieldNamingPolicy(FieldNamingPolicy.UPPER_CAMEL_CASE).create();
String jsonRepresentation = gson.toJson(someObject);
System.out.println(jsonRepresentation);
======== OUTPUT ========
{&custom_naming&:&first&,&SomeOtherField&:&second&}
&&相关文章推荐
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
访问:33394次
积分:1315
积分:1315
排名:千里之外
原创:102篇
(1)(1)(1)(1)(1)(2)(3)(38)(2)(14)(20)(6)(5)(6)(3)(1)(1)(1)

我要回帖

更多关于 谷歌解析json插件 的文章

 

随机推荐