精华内容
下载资源
问答
  • Android GSON

    2015-10-17 14:11:15
    Android 中解析JSON的开源库 GSON.JAR
  • Android Gson

    2015-10-09 09:32:11
    Gson

    转自:http://www.stormzhang.com/android/2014/05/22/android-gson/


    Json格式化校验工具:kjson


    Gson的官方下载地址:google-gson

    导入Gson包

    复制gson-2.4.jar到UseGson\app\libs

    AndroidStudio右键gson-2.4.jar -> add as library

    会自动在app/build.gradle里

    dependencies {
        compile fileTree(include: ['*.jar'], dir: 'libs')
        compile 'com.android.support:appcompat-v7:22.1.1'
        compile files('libs/gson-2.4.jar')
    }


    单个对象

    假设Json的数据格式是这样:

    {
        "id": 100,
        "body": "It is my post",
        "number": 0.13,
        "created_at": "2014-05-22 19:12:38"
    }



    定义对应的类

    public class Foo {
        public int id;
        public String body;
        public float number;
        public String created_at;
    }

    created_at不是java风格,java编程规范是驼峰结构,Gson很人性化的也提供注解的方式,只需要把Foo对象改成:

    public class Foo {
        public int id;
        public String body;
        public float number;
    
        @SerializedName("created_at")
        public String createdAt;
    }


    使用Gson

    public static final String JSON_DATA = "...";
    Foo foo = new Gson().fromJson(JSON_DATA, Foo.class);


    这里created_at直接定义了String类型,如果想要Data类型也可以:

    public class Foo {
        public int id;
        public String body;
        public float number;
        public Date created_at;
    }
    
    public static final String JSON_DATA = "...";
    GsonBuilder gsonBuilder = new GsonBuilder();
    gsonBuilder.setDateFormat("yyyy-MM-dd HH:mm:ss");
    Gson gson = gsonBuilder.create();
    Foo foo = gson.fromJson(JSON_DATA, Foo.class);


    对象的嵌套

    假设Json的数据格式是这样:

    {
        "id": 100,
        "body": "It is my post",
        "number": 0.13,
        "created_at": "2014-05-22 19:12:38",
        "foo2": {
            "id": 200,
            "name": "haha"
        }
    }


    那么定义的对象是这样:

    public class Foo {
        public int id;
        public String body;
        public float number;
        public String created_at;
        public ChildFoo foo2;
    
        public class ChildFoo {
            public int id;
            public String name;
        }
    }


    对象数组

    json数组:

    [{
        "id": 100,
        "body": "It is my post1",
        "number": 0.13,
        "created_at": "2014-05-20 19:12:38"
    },
    {
        "id": 101,
        "body": "It is my post2",
        "number": 0.14,
        "created_at": "2014-05-22 19:12:38"
    }]


    这种解析有两种方法:

    1. 解析成数组

    public static final String JSON_DATA = "...";
    Foo[] foos = new Gson().fromJson(JSON_DATA, Foo[].class);
    // 这时候想转成List的话调用如下方法
    // List<Foo> foosList = Arrays.asList(foos);

    2. 解析成List

    public static final String JSON_DATA = "...";
    Type listType = new TypeToken<ArrayList<Foo>>(){}.getType();
    ArrayList<Foo> foos = new Gson().fromJson(JSON_DATA, listType);


    1. 添加Gson包

    复制gson-2.4.jar到UseGson\app\libs

    AndroidStudio右键gson-2.4.jar -> add as library


    2. app\src\main\assets

    singleObject (new时选择Json格式)

    {
        "id": 100,
        "body": "It is my post",
        "number": 0.13,
        "created_at": "2015-10-09 14:12:30"
    }

    nestedObject (new时选择Json格式)

    {
        "id": 100,
        "body": "It is my post",
        "number": 0.13,
        "created_at": "2014-05-22 19:12:38",
        "child": {
            "id": 200,
            "name": "haha"
        }
    }

    arrayObject (new时选择Json格式)

    [{
        "id": 100,
        "body": "It is my post1",
        "number": 0.13,
        "created_at": "2014-05-20 19:12:38"
    },
    {
        "id": 101,
        "body": "It is my post2",
        "number": 0.14,
        "created_at": "2014-05-22 19:12:38"
    }]

    3. 对应的类

    SingleObject.java

    package com.silion.usegson;
    
    import com.google.gson.annotations.SerializedName;
    
    /**
     * Created by silion on 2015/10/9.
     */
    public class SingleObject {
        public int id;
        public String body;
        public float number;
        //public String created_at;
        @SerializedName("created_at")
        public String createdAt;
    
        public String toString() {
            return "SingleObject id = " + id + ", body = " + body +
                    ", number = " + number + ", createdAt = " + createdAt;
        }
    }
    

    SingleObjectData.java

    package com.silion.usegson;
    
    import java.util.Date;
    
    /**
     * Created by silion on 2015/10/9.
     */
    public class SingleObjectData {
        public int id;
        public String body;
        public float number;
        public Date created_at;
    
        public String toString() {
            return "SingleObjectData id = " + id + ", body = " + body +
                    ", number = " + number + ", created_at = " + created_at;
        }
    }
    

    NestedObject.java

    package com.silion.usegson;
    
    /**
     * Created by silion on 2015/10/9.
     */
    public class NestedObject {
        public int id;
        public String body;
        public float number;
        public String created_at;
        public Child child;
    
        public class Child {
            public int id;
            public String name;
        }
    
        public String toString() {
            return "NestedObject id = " + id + ", body = " + body +
            ", number = " + number + ", createdAt = " + created_at +
                    "\n" +"child = " + this.child.id + ", " + this.child.name;
        }
    }

    4. 布局

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:tools="http://schemas.android.com/tools"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:paddingBottom="@dimen/activity_vertical_margin"
        android:paddingLeft="@dimen/activity_horizontal_margin"
        android:paddingRight="@dimen/activity_horizontal_margin"
        android:paddingTop="@dimen/activity_vertical_margin"
        android:orientation="vertical"
        tools:context=".MainActivity">
    
    
        <Button
            android:id="@+id/single"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/single" />
    
        <Button
            android:id="@+id/nested"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/nested" />
    
        <Button
            android:id="@+id/array"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:text="@string/array" />
    </LinearLayout>
    

    5. MainActivity.java

    package com.silion.usegson;
    
    import android.app.Activity;
    import android.content.res.AssetManager;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    
    import com.google.gson.Gson;
    import com.google.gson.GsonBuilder;
    import com.google.gson.reflect.TypeToken;
    
    import java.io.IOException;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.io.Reader;
    import java.lang.reflect.Type;
    import java.util.ArrayList;
    import java.util.Arrays;
    import java.util.List;
    
    public class MainActivity extends Activity {
    
        View.OnClickListener mClickListener = new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                switch (v.getId()) {
                    case R.id.single: {
                        AssetManager assetManager = MainActivity.this.getAssets();
                        try {
                            SingleObject object = new Gson().fromJson(new InputStreamReader(assetManager.open("singleObject")), SingleObject.class);
                            android.util.Log.v("slong.liang", object.toString());
    
                            GsonBuilder gsonBuilder = new GsonBuilder();
                            gsonBuilder.setDateFormat("yyyy-mm-dd HH:mm:ss");
                            SingleObjectData objectData = gsonBuilder.create().fromJson(new InputStreamReader(assetManager.open("singleObject")), SingleObjectData.class);
                            android.util.Log.v("slong.liang", objectData.toString());
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                        break;
                    }
                    case R.id.nested: {
                        AssetManager assetManager = MainActivity.this.getAssets();
                        Reader json = null;
                        try {
                            InputStream is = assetManager.open("nestedObject");
                            json = new InputStreamReader(is);
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
                        NestedObject object = new Gson().fromJson(json, NestedObject.class);
                        android.util.Log.v("slong.liang", object.toString());
                        break;
                    }
                    case R.id.array: {
                        AssetManager assetManager = MainActivity.this.getAssets();
    
                        Reader json1 = null;
                        try {
                            json1 = new InputStreamReader(assetManager.open("arrayObject"));
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
    
                        //解析成数组
                        Gson gson = new Gson();
                        SingleObject[] objects = gson.fromJson(json1, SingleObject[].class);
                        List<SingleObject> objectList1 = Arrays.asList(objects);
                        android.util.Log.v("slong.liang", "-------Array method 1--------");
                        for(SingleObject object : objectList1) {
                            android.util.Log.v("slong.liang", object.toString());
                        }
    
                        Reader json2 = null;
                        try {
                            json2 = new InputStreamReader(assetManager.open("arrayObject"));
                        } catch (IOException e) {
                            e.printStackTrace();
                        }
    
                        //解析成List
                        Type listType = new TypeToken<ArrayList<SingleObject>>(){}.getType();
                        List<SingleObject> objectList2 = gson.fromJson(json2, listType);
                        android.util.Log.v("slong.liang", "-------Array method 2--------");
                        for(SingleObject object : objectList2) {
                            android.util.Log.v("slong.liang", object.toString());
                        }
                        break;
                    }
                    default:
                        break;
                }
            }
        };
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            Button singleButton = (Button) findViewById(R.id.single);
            singleButton.setOnClickListener(mClickListener);
            Button nestedButton = (Button) findViewById(R.id.nested);
            nestedButton.setOnClickListener(mClickListener);
            Button arrayButton = (Button) findViewById(R.id.array);
            arrayButton.setOnClickListener(mClickListener);
        }
    }
    


    展开全文
  • android Gson

    2018-01-26 15:24:31
    目前的客户端大都有和服务端进行交互,而数据的格式基本就是json了,于是在Android开发中就经常用到json解析,方便的是Google已经为我们提供了一个很棒的json解析库–gson,那么今天就来总结分享下gson的各种用法。...

    原文:http://stormzhang.com/android/2014/05/22/android-gson/

    目前的客户端大都有和服务端进行交互,而数据的格式基本就是json了,于是在Android开发中就经常用到json解析,方便的是Google已经为我们提供了一个很棒的json解析库–gson,那么今天就来总结分享下gson的各种用法。

    gson的官方下载地址:google-gson

    单个对象

    首先我们来看一个最简单的用法,假设json的数据格式是这样的:

    {
        "id": 100,
        "body": "It is my post",
        "number": 0.13,
        "created_at": "2014-05-22 19:12:38"
    }

    那么我们只需要定义对应的一个类:

    public class Foo {
        public int id;
        public String body;
        public float number;
        public String created_at;
    }

    使用起来只需如下几行代码就行了:

    public static final String JSON_DATA = "...";
    Foo foo = new Gson().fromJson(JSON_DATA, Foo.class);

    这里是最简单的用法,created_at直接定义了String类型,如果你想要Date类型的也可以,就变成下面的例子:

    public class Foo {
        public int id;
        public String body;
        public float number;
        public Date created_at;
    }
    
    public static final String JSON_DATA = "...";
    GsonBuilder gsonBuilder = new GsonBuilder();
    gsonBuilder.setDateFormat("yyyy-MM-dd HH:mm:ss");
    Gson gson = gsonBuilder.create();
    Foo foo = gson.fromJson(JSON_DATA, Foo.class);

    有人说created_at不是java风格,java编程规范是驼峰结构,那么ok,Gson很人性化的也提供注解的方式,只需要把Foo对象改成这样就ok了:

    public class Foo {
        public int id;
        public String body;
        public float number;
    
        @SerializedName("created_at")
        public String createdAt;
    }

    然后用法不变,是不是很方便。

    对象的嵌套

    假设要返回如下数据:

    {
        "id": 100,
        "body": "It is my post",
        "number": 0.13,
        "created_at": "2014-05-22 19:12:38",
        "foo2": {
            "id": 200,
            "name": "haha"
        }
    }

    那么对象的定义是这样的

    public class Foo {
        public int id;
        public String body;
        public float number;
        public String created_at;
        public ChildFoo foo2;
    
        public class ChildFoo {
            public int id;
            public String name;
        }
    }

    对象数组

    假如返回的是json数组,如下:

    [{
        "id": 100,
        "body": "It is my post1",
        "number": 0.13,
        "created_at": "2014-05-20 19:12:38"
    },
    {
        "id": 101,
        "body": "It is my post2",
        "number": 0.14,
        "created_at": "2014-05-22 19:12:38"
    }]

    这种解析有两种方法:

    • 1、解析成数组
      public static final String JSON_DATA = "...";
      Foo[] foos = new Gson().fromJson(JSON_DATA, Foo[].class);
      // 这时候想转成List的话调用如下方法
      // List<Foo> foosList = Arrays.asList(foos);

    • 2、解析成List
      public static final String JSON_DATA = "...";
      Type listType = new TypeToken<ArrayList<Foo>>(){}.getType();
      ArrayList<Foo> foos = new Gson().fromJson(JSON_DATA, listType);

    总结

    上面基本就总结到开发中常用到的几种类型,用法很简单方便,主要需要json数据抽象成对应的数据模型就ok了。不过阿里也有一套自己的开源json解析库–FastJson,据说性能更佳,但是实际应用中感觉Gson的解析已经相当快了,而且更习惯用Google官方的东西,所以对FastJson没有怎么研究,以后有时间使用体验一下。

    展开全文
  • Android Gson使用Demo

    2017-06-19 20:43:52
    android Gson使用实例 注释详细
  • android gson tool

    2012-02-03 15:44:12
    android gson tool android 连接服务器传输 gson 格式 工具包
  • Android Gson解析案例

    2013-06-04 11:00:34
    Android Gson解析案例,可变长数据解析
  • Android GSON使用

    千次阅读 2019-10-27 20:22:51
    Android GSON使用 使用场景及作用:Gson 是用来解析和生成Json,在实际项目中广泛使用。注意定义定对像的属性值必须和json中的保持一致,不然会解析失败。当然这就要求后台命名规范。 集成 dependencies { ...

    Android GSON使用

    使用场景及作用:Gson 是用来解析和生成Json,在实际项目中广泛使用。注意定义定对像的属性值必须和json中的保持一致,不然会解析失败。当然这就要求后台命名规范。

    集成

    dependencies {
      implementation 'com.google.code.gson:gson:2.8.6'
    }
    

    一、对象转Json

    new Gson().toJson(obj)
    
    

    二、Json转对象

    new Gson().fromJson(String json, Class<T> classOfT)
    
    

    三、测试结果

    import androidx.appcompat.app.AppCompatActivity;
    
    import android.os.Bundle;
    import android.util.Log;
    
    import com.google.gson.Gson;
    
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * @author by t, Date on 2019-10-23.
     * note: Gson使用
     */
    public class MainActivity extends AppCompatActivity {
    
        private final String TAG = "MainActivity";
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            Gson gson = new Gson();
    
            Person person = new Person();
            person.setName("张三");
            person.setAge(22);
    
            Log.d(TAG, "toJson:" + gson.toJson(person));
    
            String jsonStr = "{\"age\":22,\"name\":\"张三\"}";
    
            Log.d(TAG, "fromJson:" + new Gson().fromJson(jsonStr, Person.class).toString());
    
            //来个复杂点的
    
            CompanyInfo companyInfo = new CompanyInfo();
            companyInfo.setCompanyName("公司名字");
            companyInfo.setCompanyOwner("老板");
    
            List<Person> personList = new ArrayList<>();
            personList.add(new Person("张三", 22));
            personList.add(new Person("李四", 23));
            personList.add(new Person("王五", 24));
            companyInfo.setPersonList(personList);
    
            String toJson = gson.toJson(companyInfo);
    
            Log.d(TAG, "toJson:" + toJson);
    
            Log.d(TAG, "fromJson:" + gson.fromJson(toJson, CompanyInfo.class));
        }
    
    
        public class Person {
            private String name;
            private int age;
    
            public Person() {
            }
    
            public Person(String name, int age) {
                this.name = name;
                this.age = age;
            }
    
            public String getName() {
                return name;
            }
    
            public void setName(String name) {
                this.name = name;
            }
    
            public int getAge() {
                return age;
            }
    
            public void setAge(int age) {
                this.age = age;
            }
    
            @Override
            public String toString() {
                return "Person{" +
                        "name='" + name + '\'' +
                        ", age=" + age +
                        '}';
            }
        }
    
    
        public class CompanyInfo {
            private String companyName;
            private String companyOwner;
            private List<Person> personList;
    
            public String getCompanyName() {
                return companyName;
            }
    
            public void setCompanyName(String companyName) {
                this.companyName = companyName;
            }
    
            public String getCompanyOwner() {
                return companyOwner;
            }
    
            public void setCompanyOwner(String companyOwner) {
                this.companyOwner = companyOwner;
            }
    
            public List<Person> getPersonList() {
                return personList;
            }
    
            public void setPersonList(List<Person> personList) {
                this.personList = personList;
            }
    
            @Override
            public String toString() {
                return "CompanyInfo{" +
                        "companyName='" + companyName + '\'' +
                        ", companyOwner='" + companyOwner + '\'' +
                        ", personList=" + personList +
                        '}';
            }
        }
    
    }
    

    Gson处理空对象场景

    
    //        UserInfo userInfo = new UserInfo();
    //        userInfo.setId(0);
    //        userInfo.setName("张三");
    //        userInfo.setAddress(null);
    
    //        {"id":0,"name":"张三"}
    
    
    //        UserInfo userInfo = new UserInfo();
    //        userInfo.setId(0);
    //        userInfo.setName("张三");
    //
    //        {"id":0,"name":"张三"}
    
    //        UserInfo userInfo = new UserInfo();
    //        userInfo.setId(0);
    //        userInfo.setName("张三");
    //        userInfo.setAddress("");
    //        
    //        {"address":"","id":0,"name":"张三"}
    
    
    
            UserInfo userInfo = new UserInfo();
            userInfo.setId(1);
            userInfo.setName("张三");
            userInfo.setAddress("地址");
            userInfo.setObject(new StudentInfo(2));
    
    //        {"address":"地址","data":{"studentId":2},"id":1,"name":"张三"}
    
    
    
    展开全文
  • android Gson转换List集合demo,生成Json字符串,转换为List,对象
  • Android Gson使用详解

    2018-06-04 17:41:54
    [Android Gson使用详解](http://www.apkbus.com/blog-957799-77928.html) (出处: 安卓巴士 - 安卓开发 - Android开发 - 安卓 - 移动互联网门户)

     

    [Android Gson使用详解](http://www.apkbus.com/blog-957799-77928.html)
    (出处: 安卓巴士 - 安卓开发 - Android开发 - 安卓 - 移动互联网门户)

    展开全文
  • Android Gson 解析

    2014-04-21 10:04:43
    Android Gson 解析 package com.example.gsondemo; import java.util.List; import java.util.Map; import com.google.gson.Gson; import android.os.Bundle; import android.util.Log; import android....
  • Android Gson的使用

    2016-03-15 11:41:49
    Android Gson 2014 年 05 月 22 日 android 目前的客户端大都有和服务端进行交互,而数据的格式基本就是json了,于是在Android开发中就经常用到json解析,方便的是Google已经为我们提供了一个很棒的json解析...
  • Android GsonDemo

    2016-03-20 11:37:02
    网络上有很多Json解析库,这里我使用Gson来解析Json,Gson有个特点,就是要将数据的键作为变量封装到一个个实体中,如果值为数组的,变量的类型还必须是集合,然后通过Gson.fromJson来传入数据和实体类,再通过实体...
  • android Gson的使用

    2015-11-28 19:24:27
    android Gson的使用  相对于较为传统的Json解析来说,google共享的开源Gson在解析速度和所使用的内存在有着明显的优势,虽然说阿里巴巴也提供了fastgson包,但是它跟Gson的处理速度大同小异,只是底层实现的...
  • Android Gson使用实例Demo

    2017-06-18 21:12:57
    使用Gson解析Json和Json数组,通俗易懂
  • 描述使用代码插桩,优化Gson处理后台弱数据类型字段不规范的问题...尤其后台是长周期大项目,几乎不可能为了App兼容Android 使用Gson时为强字段类型约束,就会存在:定义的是Int,返回String定义的是Obejct,返回Arr...
  • User user = new User(null, 18, true, null); Gson gson = new Gson(); String json = gson.toJson(user); System.out.println(json);
  • android gson解析json

    2019-12-23 13:41:15
    implementation 'com.google.code.gson:gson:2.8.6' 第二步:GsonFormat依赖 file/setting/plugins/Browse repositories/GsonFormat 快捷键alt+s(快速生成Javabean) 第三步:新建ben文件 public class UserBean...
  • Android Gson使用

    千次阅读 2019-06-28 23:45:56
    GSON库主要就是可以将一段JSON格式的字符串自动映射成一个对象或者一个集合,从而不需要我们再手动去编写代码进行解析了。 不过需要添加相关依赖implementation 'com.google.code.gson:gson:2.8.2' {"name":"Tom...
  • android Gson的 引用

    千次阅读 2018-10-19 09:44:08
      使用环境:  需要解析Json的时候  相关方法很多,有Gson,FastJson,等等 引用方法:   //Gson implementation 'com.google.code.gson:gson:2.8.0'   在使...
  • NULL 博文链接:https://ujs-lifazhu.iteye.com/blog/1750820
  • Android Gson解析多层嵌套复杂数据

    千次阅读 2015-10-12 19:48:22
    Android Gson解析多层嵌套复杂数据 时间:2014-08-06 19:04:32 阅读:5416 评论:0  收藏:0 [点我收藏+] 标签:android gson  目前解析json有三种工具:org.json(Java常用的解析),fastjson...
  • android GSON的使用

    2018-09-06 11:18:12
    Gson gson = new Gson(); if (!TextUtils.isEmpty(localContact)) { selectSortDtes = gson.fromJson(localContact, new TypeToken&lt;List&lt;ContactEntity.InfosBean.ListBean&g...
  • Android Gson 泛型解析

    千次阅读 2019-04-11 19:37:13
    解析 bean 类: ... Gson gson = new Gson(); Type objectType = type(AbsHttpResposeBaseCodeBean.class, clazz); return gson.fromJson(json, objectType); } 其实就是要注意传递泛型类型的问题。
  • Android Gson用法

    千次阅读 2014-08-12 23:30:15
    目前的客户端大都有和服务端进行交互,而数据的格式基本就是json了,于是在Android开发中就经常用到json解析,方便的是Google已经为我们提供了一个很棒的json解析库–gson,那么今天就来总结分享下gson的各种用法。...
  • Android Gson json使用

    2018-01-22 11:12:25
    build.gradle中增加dependencies{ compile 'com.google.code.gson:gson:2.7'} /** * 将jsonString转成泛型bean * Created by gaobo on 2018/1/22. */ public class GsonUtils { /** * 将jsonString转成泛型...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 38,527
精华内容 15,410
关键字:

androidgson