很好用的Google 开源项目Gson在java中解析和创建json格式的数据

    技术2022-05-19  22

    Gson是一个开源的java库,项目主页http://code.google.com/p/google-gson/。其可以把一个java对象转换成json格式,也可以把一个json格式的字符串,转换成一个对象,虽然其介绍上说这样转换可以,偶亲测没有成功,也许是个bug了,不过一般把对象转换成字符以及对json格式的数据进行解析这些功能已经完全够用了,而且其还支持java的泛型对象,比如HashMap,ArrayList等

    那么什么是json呢,参见 http://www.json.org/json-zh.html官方对其的介绍,在这里就不罗嗦了,简单的说其就是一种JavaScript的数据交换格式。

     json其中有两个类非常有用且常用,一个是Gson,另一个是JsonParser,前者提供了把java对象转换成json格式字符串的功能,后者则负责解析Json格式数据,看如下源码

     -----------------------------------------------------------

    这是个简单的对象,其中包含两个字符类型,和一个double类型的数据

    public class Employee {

     

        String name = "Jone";

        double salary = 1000;

        String sex = "M";

     

        public Employee() {

        }

    }

     

    使用Gson把该对象转换成json格式数据

    Gson gson = new Gson();//初始gson对象

    String json = gson.toJson(new Employee());//调用Gson的方法toJson把对象转换

    System.out.print(json);

     

    输出json的数据格式如下

    {"name":"Jone","salary":1000.0,"sex":"M"}

     -----------------------------------------------------------

     

    再看一个java内置对象HashMap的例子

    HashMap map = new HashMap();//初始化一个map对象

    map.put("name", "Tom");  //存入数据

        map.put("salary", 1000);

        map.put("sex", "M");

        Gson gson = new Gson();

        String json = gson.toJson(map); //开始转换

    System.out.print(json);

     

    输出结果如下

    {"sex":"M","name":"Tom","salary":1000}

     

    如此简单!

     -----------------------------------------------------------

     

    接下来再看该库提供的解析json的功能

    首先定义如下的json数据,其中name是个json数组

    String json = "{/"name/":[/"Jone/",/"Tom/",/"Jim/",/"Jerry/"],/"manager/":/"Jone/"}";

     

    JsonParser jsonparer = new JsonParser();//初始化解析json格式的对象

     

          //JsonArray是该库提供的存放解析后的Json数组的对象,首先调用JsonParser的getAsJsonObject的方法把

          //字符串转换为该库专用的json 的对象

          //然后再调用json对象的getAsJsonArray方法得到一个name的json格式数组,参数为json格式数据中的数组名

          JsonArray jsonarray = jsonparer.parse(json).getAsJsonObject().getAsJsonArray("name");

     

          //接下来,打印该数组中的内容

          for(int  i=0;i<jsonarray.size();i++)

          {

             String name= jsonarray.get(i).getAsString();

             System.out.println(name);

          }

     

    结果如下

    Jone

    Tom

    Jim

    Jerry

     

    如果想得到键manager的内容如下

    jsonparer.parse(json).getAsJsonObject().get("manager").getAsString()

     

    注意:JsonObject的方法get(“manager”)是得到一个JsonElement元素,然后再调用该元素的getAsString()方法得到及键值,如果不调用getAsString()方法,输出结果如下”Jone”是加引号的


    最新回复(0)