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文件
- 点击File–>Settings–>Plugins–>然后搜索GsonFormat,点击下载并安装。(mac 下选择android studio-> preferences -> Plugins)
- 安装后提示restart android studio,完成后,可以到plugins下查看之前安装的插件如果显示uninstall就表示安装成功了
- 自定义个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(); } } }