第四章 gradle自动化构建系列文章 之 Groovy中的json

第四章 gradle自动化构建系列文章 之 Groovy中的json

< center>

查看 “Android自动化构建系列” 全部文章

  • Groovy 使用 JsonSlurper,JsonOutput 对象分别解析和生成JSon字符串,这一过程十分简便;

生成JSON字符串

  • groovy 使用 JsonOutput 将对象序列化为Json字符串;

    //将任何一个bean类转换成json
    def amap= [name:‘xubeihong’,city:“shanghai”,id:“19257”]
    def json = JsonOutput.toJson(amap)
    println json.toString()

  • 运行结果:

      {"name":"xubeihong","city":"shanghai","id":"19257"}
    
  • JsonOutput.toJson()方法还可以数字,布尔,字符,字符串,日期,Map,List,闭包等作为参数;

将一个json转换成漂亮的格式

def json ='{"name":"xubeihong","city":"shanghai","id":"19257"}'
println JsonOutput.prettyPrint(json)
  • 运行结果:

      {
      	"name": "xubeihong",
      	"city": "shanghai",
      	"id": "19257"
      }
    

解析JSON字符串

  • groovy 使用 JsonSlurper 解析Json对象,将其生成一个相应的类;

      //JsonSlurper将json转换成对象
      def json= '{"name":"xubeihong","city":"shanghai","id":"19257"}'
      def parse = new JsonSlurper().parseText(json)
      //同样的可以直接使用parse(Object) 效果是一样的
      //def parse = new JsonSlurper().parseText(json)
      println parse.toString()
      println parse['name']
    

运行输出结果:

{name=xubeihong, city=shanghai, id=19257}
xubeihong
  • 可见groovy中json 是不用定义bean类,而可以直接解析的,这一点是java无法比拟的

当然如果你习惯了java中使用三方库解析json也是可以的

  • 第一步在项目的更目录创建文件夹 libs并拷入jar包

  • 右键依赖这个jar包

  • 使用解析json

    //使用gson解析json
    def s=’{“name”:“xubeihong”,“city”:“shanghai”,“id”:“19257”}’
    Gson gson = new Gson()
    def result = gson.fromJson(s, Map.class)
    println result

结果输出

[name:xubeihong, city:shanghai, id:19257]
  • 总结来时 groovy自带的groovy功能更加的强大

通过实际应用的中的案例学习

  • 场景:通过网络请求获取一个json的返回数据并将这个json解析

      getNetWorkData("http://192.168.1.3:9090?function=movesQuary")
      
      /**
       * 通过网络获取数据
       * @param url
       */
      def getNetWorkData(String url) {
          //发送http请求
      
          try {
              HttpURLConnection connection = new URL(url).openConnection()
      
              connection.setConnectTimeout(5 * 1000)
              connection.setReadTimeout(5 * 1000)
              //设置是否向httpURLConnection写入内容
              //post请求必须设置为true,因为post请求参数是否写在http正文中
              connection.setDoOutput(true)
              //设置是否从HttpURLConnection读入内容,默认为true
              connection.setDoInput(true)
              //设置是否使用缓存,post请求不使用缓存
              connection.setUseCaches(true)
              //设置请求方法  注意大小写!
              connection.setRequestMethod("GET")
              //设置长连接
              //connection.setRequestProperty("Connection","keep-Alive");
              //设置字符集
              connection.setRequestProperty("Charset", "utf-8")
              //connection.setRequestProperty("Content-type","application/x-www-");
      
              //!!!重点部分,设置参数
              //        String params = "page = 1 & num = 10"
              //        OutputStream os = connection.getOutputStream()
              //        os.write(params.getBytes())
              //        os.flush()
              //        os.close()
              if (connection.getResponseCode() == HttpURLConnection.HTTP_OK) {
                  InputStream is = connection.getInputStream()
                  StringBuilder sb = new StringBuilder()
                  byte[] bytes = new byte[1024]
                  int i = 0
                  while ((i = is.read(bytes)) != -1) {
                      sb.append(new String(bytes, 0, i, "utf-8"))
                  }
                  is.close()
      
      
                  dealResult(sb.toString())
              }
          } catch (MalformedURLException e) {
              e.printStackTrace()
          } catch (IOException e) {
              e.printStackTrace()
          }
      }
      
      def dealResult(String s) {
      
          //String data = new String(s.getBytes(), Charset.forName("utf-8"))
          println '请求成功'
      
         
          def result = new JsonSlurper().parseText(s)
    
    
          //json直接原格式输出
          println result.toString()
          //json格式化形式输出
          println JsonOutput.prettyPrint(s)
          //获取其中参数的值,不需要实体类支撑我们可以轻松得到期望的值
          println result.result.describe
    
    
    
      
      }
    

运行结果:

	请求成功
{
    "code": 200,
    "message": "请求成功",
    "result": {
        "status": 0,
        "describe": "文件搜索中...",
        "movesList": [
            
            {
                "name": "a1.mp4",
                "url": "http://192.168.1.3:8081/moves/a1.mp4",
                "size": 263163483,
                "image": "image",
                "categry": "love"
            },
            {
                "name": "a10.mp4",
                "url": "http://192.168.1.3:8081/moves/a10.mp4",
                "size": 634304351,
                "image": "image",
                "categry": "love"
            }
             	            
        ]
    }
}
{code=200, message=请求成功, result={status=0, describe=文件搜索中..., movesList=[ {name=a1.mp4, url=http://192.168.1.3:8081/moves/a1.mp4, size=263163483, image=image, categry=love} ]}}
文件搜索中...

查看 “Android自动化构建系列” 全部文章

你可能感兴趣的:(groovy系列)