Gson 的使用和GsonFormat插件的使用

首先介绍下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();
        }
    }
}

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值