首页 > 技术文章 > JSON 解析之 GSON

yanglanwan 2019-08-03 17:49 原文

1_GSON 框架技术
1)特点:编码简洁,谷歌官方推荐

2)下载地址:https://mvnrepository.com/artifact/com.google.code.gson/gson


1.1_将 json 格式的字符串{}转换为 Java 对象
1)用到的 API <T> T fromJson(String json, Class<T> classOfT);//将 json 对象转换为 Java 对象 的方法 注意:要求 json 对象中的 key 的名称与 java 对象对应的类中的属性名要相同
2)使用步骤

(1)将 Gson 的 jar 包导入到项目中

(2)创建Gson对象 : Gson gson = new Gson();

(3)通过创建的Gson对象调用fromJson()方法,返回该JSON数据对应的Java对象 ShopInfo shopInfo = gson.fromJson(json, ShopInfo.class);

3)测试数据 

{
    "id":2,
    "name":"大虾",
    "price":12.3,
    "imagePath":"http://192.168.10.165:8080/L05_Server/images/f1.jpg"
}

4)例子

 // (1) 将json格式的字符串{ }转换为 Java对象
    private void jsonToJavaObject() {

        // 1 获取或创建 json
        String json = "{\n" + "\t\"id\":2, \"name\":\"大虾\", \n" + "\t\"price\":12.3, \n" +
                "\t\"imagePath\":\"http://192.168.10.165:8080/L05_Server/images/f1.jpg\"\n" + "}\n";
        // 2 解析 json
        Gson gson = new Gson();
        ShopInfo shopInfo = gson.fromJson(json, ShopInfo.class);
        // 3 显示 JSON数据
        tv_native_orignal.setText(json);
        tv_native_last.setText(shopInfo.toString());
    }

1.2_将 json 格式的字符串[]转换为 Java 对象的 List
1)用到的 API T fromJson(String json, Type typeOfT);//将 json 数组转换为 Java 对象的 list

注意:要求 json 对象中的 key 的名称与 java 对象对应的类中的属性名要相同

2)使用步骤

(1)将 Gson 的 jar 包导入到项目中

(2)创建Gson对象 : Gson gson = new Gson();

(3)通过创建的Gson对象调用fromJson()方法,返回该JSON数据对应的Java集合: List<ShopInfo> shops = gson.fromJson(json, new TypeToken<List<ShopInfo>>() {}.getType());

3)测试数据 

[
    {
        "id":1,
        "imagePath":"http://192.168.10.165:8080/f1.jpg",
        "name":"大虾1",
        "price":12.3
    },
    {
        "id":2,
        "imagePath":"http://192.168.10.165:8080/f2.jpg",
        "name":"大虾2",
        "price":12.5
    }
]

4)例子

  //(2) 将 json格式的字符串 [] 转换为 Java对象的 List
    private void jsonToJavaList() {

        // 1 获取或创建 json
        String json = "[\n" + "    {\n" + "        \"id\": 1,\n" + "        \"imagePath\": \"http://192.168.10.165:8080/f1.jpg\",\n"
                + "        \"name\": \"大虾 1\",\n" + "        \"price\": 12.3\n" + "    },\n" + "    {\n" + "        \"id\": 2,\n"
                + "        \"imagePath\": \"http://192.168.10.165:8080/f2.jpg\",\n" + "        \"name\": \"大虾 2\",\n"
                + "        \"price\": 12.5\n" + "    }\n" + "]";
        // 2 解析 json
        Gson gson = new Gson();
        List<ShopInfo> shops = gson.fromJson(json, new TypeToken<List<ShopInfo>>() {
        }.getType());

        // 3 显示JSON数据
        tv_native_orignal.setText(json);
        tv_native_last.setText(shops.toString());
    }

1.3_将 Java 对象转换为 json 字符串{}
1)用到的 API String toJson(Object src);

2)使用步骤

(1)将 Gson 的 jar 包导入到项目中

(2)创建Gson对象 : Gson gson = new Gson();

(3)通过创建的Gson对象调用toJson()方法,返回json数据:

  ShopInfo shop = new ShopInfo(1, "鲍鱼", 250.0, "");

  String json = gson.toJson(shop); 

3)例子

/**
     * (3) 将 Java对象转换为 json字符串 {}
     */
    private void javaToJsonObject() {
        // 1 获取或创建 Java 对象    
        ShopInfo shop = new ShopInfo(1, "鲍鱼", 250.0, "");

        // 2 生成 JSON数据
        Gson gson = new Gson();
        String json = gson.toJson(shop);

        // 3 展示 json数据
        tv_native_orignal.setText(shop.toString());
        tv_native_last.setText(json);
    }

1.4_将 Java 对象的 List 转换为 json 字符串[]
1)用到的 API String toJson(Object src);

2)使用步骤

(1)将 Gson 的 jar 包导入到项目中

(2)创建Gson对象 : Gson gson = new Gson();

(3)通过创建的Gson对象调用toJson()方法,返回json数据:

  List<ShopInfo> shops = new ArrayList<>();

   String json = gson.toJson(shops);

3)例子

  /**
     * (4) 将Java对象的List转换为json字符串 []
     */
    private void javaToJsonList() {
        // 1 获取或创建 Java 集合     
        List<ShopInfo> shops = new ArrayList<>();
        ShopInfo baoyu = new ShopInfo(1, "鲍鱼", 250, "baoyu");
        ShopInfo haisen = new ShopInfo(2, "海参", 251, "haisen");
        shops.add(baoyu);
        shops.add(haisen);

        // 2 生成 JSON数据
        Gson gson = new Gson();
        String json = gson.toJson(shops);

        // 3 展示 json数据
        tv_native_orignal.setText(shops.toString());
        tv_native_last.setText(json);
    }

 

推荐阅读