Gson 的使用和GsonFormat插件的使用

来源:互联网 发布:windows java进程监控 编辑:程序博客网 时间:2024/06/16 11:34

首先介绍下JSON的定义,JSON是JavaScript Object Notation的缩写。

一种轻量级的数据交换格式,具有良好的可读和便于快速编写的特性。业内主流技术为其提供了完整的解决方案(有点类似于正则表达式,获得了当今大部分语言的支持),从而可以在不同平台间进行数据交换。JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为。

JSON的结构:
(1) Name/Value Pairs(无序的):类似所熟知的Keyed list、 Hash table、Disctionary和Associative array。在Android平台中同时存在另外一个类 "Bundle",某种程度上具有相似的行为。

(2) Array(有序的):一组有序的数据列表。


一  Json的特性和在数据交互中的地位就不用说了,直接看案例。

  首先在android studio中创建assets文件目录,用于存放Json数据文件,android studio 1.3 默认项目文件目录下是没有assets文件夹的,

  所以需要我们进行创建,创建方法如下:

     

  创建好assets文件目录以后,在其目录下创建一个Text.json文件。

一:  Json的特性和在数据交互中的地位就不用说了,直接看案例。

  首先在android studio中创建assets文件目录,用于存放Json数据文件,android studio 1.3 默认项目文件目录下是没有assets文件夹的,

  所以需要我们进行创建,创建方法如下:

     

  创建好assets文件目录以后,在其目录下创建一个Text.json文件。

二:  json文件实体类的创建

传统的方式是根据json文件手动创建实体类,然后使用gson来解析。但是这种方式需要自己书写代码,如果json文件结构比较复杂,就会导致书写大量的代码,且容易出错。所以我们可以考虑使用gsonformat插件来替我们做这件事,即自动生成javabean文件

  1. 点击File–>Settings–>Plugins–>然后搜索GsonFormat,点击下载并安装。(mac 下选择android studio-> preferences -> Plugins)
  2. 安装后提示restart android studio,完成后,可以到plugins下查看之前安装的插件如果显示uninstall就表示安装成功了
  3. 自定义个javabean(就是新建一个名字最好带bean的无内容的class文件),然后在该文件处点击–>code–>Generate–>GsonFormat(或者直接按alt+s键[Window]),然后将JSON数据复制到该框框内。点击Format可以查看格式化后的效果(跳过)。直接点击OK即可,就已经生成了需要的实体类,非常方便

三:  json文件解析gson

有了json文件,有了javabean文件,那么就只需要执行解析操作了

try {    InputStreamReader inputStreamReader = new InputStreamReader(getAssets().open("Text.json"), "UTF-8");    BufferedReader bufferedReader = new BufferedReader(inputStreamReader);    String line;    StringBuilder builder = new StringBuilder();    while ((line = bufferedReader.readLine()) != null) {        builder.append(line);    }    bufferedReader.close();    inputStreamReader.close();    parseJsonWithGson(builder.toString());} catch (Exception e) {    e.printStackTrace();}

最后贴出完整的步骤:

1. layout文件布局

<?xml version="1.0" encoding="utf-8"?><android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:app="http://schemas.android.com/apk/res-auto"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    tools:context="com.example.lisaliu.okhttpdemo.MainActivity">    <LinearLayout        android:id="@+id/linear_layout"        android:layout_width="match_parent"        android:layout_height="wrap_content">        <Button            android:id="@+id/parse_json"            android:layout_width="0dp"            android:layout_height="wrap_content"            android:layout_weight="1"            android:text="解析json"          />    </LinearLayout></android.support.constraint.ConstraintLayout>

2. json文件,见前面描述部分

3. 实体类,见前面描述部分

4. activity中的实现


public class MainActivity extends AppCompatActivity implements View.OnClickListener {    TextView responstText;    private String string;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_main);        Button parseJsonButton = (Button) findViewById(R.id.parse_json);        responstText = (TextView) findViewById(R.id.response_text);        parseJsonButton.setOnClickListener(this);    }    @Override    public void onClick(View v) {        switch (v.getId()) {            case R.id.parse_json:                parseJsonRequest();                break;            default:                break;        }    }    private void parseJsonRequest() {        try {            InputStreamReader inputStreamReader = new InputStreamReader(getAssets().open("Text.json"), "UTF-8");            BufferedReader bufferedReader = new BufferedReader(inputStreamReader);            String line;            StringBuilder builder = new StringBuilder();            while ((line = bufferedReader.readLine()) != null) {                builder.append(line);            }            bufferedReader.close();            inputStreamReader.close();            parseJsonWithGson(builder.toString());        } catch (Exception e) {            e.printStackTrace();        }    }    private void parseJsonWithGson(String jsonData) {        Gson gson = new Gson();        List<App> appList = gson.fromJson(jsonData, new TypeToken<List<App>>() {        }.getType());        for (App app : appList) {            Toast.makeText(this, "name is " + app.getName(), Toast.LENGTH_SHORT).show();        }    }}

原创粉丝点击