通过服务器返回来JSON歌词数据进行解析

      前言:很多初学者学到一定的知识时候,会想说 我们从服务端怎么接受数据,最近在做一个音乐播放器,前段时间自己弄了自定义歌词滚动,后来发现 这个满足不了,歌词文件怎么办,想到了去服务器下载。于是我找了很多 比如说QQ音乐,百度音乐,酷狗音乐,好像都没有提供API ,最后找到了一个交歌词迷的API。虽然资源比较少,但是凑合着用,毕竟免费的,接下来 来展示下从服务器如何接受数据。

              从服务器接收回来的数据一般有两种格式 一种是json/xml

            JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、C#Java、JavaScript、PerlPython等)。这些特性使JSON成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。     

          XML

可扩展 标记语言标准通用标记语言的子集,是一种用于标记电子文件使其具有结构性的 标记语言
在电子计算机中,标记指 计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种的信息比如文章等。它可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。 它非常适合 万维网传输,提供统一的方法来描述和交换独立于 应用程序或供应商的结构化数据。是Internet环境中跨平台的、依赖于内容的技术,也是当今处理分布式结构信息的有效工具。早在1998年,W3C就发布了XML1.0规范,使用它来简化Internet的文档信息传输


      上面我就从百度百科拿出来 简单的介绍下两种传输格式,今天来讲的是JSON。首先来介绍下歌词迷这个API接口:

       API接口网址:http://www.devapi.org/lyric-fans.html#item2

      接下里来介绍下返回的JSON数据介绍:


   

         HTTP(GET) / GBK,UTF-8    这个就不用说了会点网络编程都知道

      2.接口返回值类型

         JSON

      3.根据歌名/歌手获取JSON数据

          请求的地址:http://geci.me/api/lyric/ SongName  (这里的SongName 指的是歌名) 

               请求的地址:http://geci.me/api/lyric/ SongName/Artist  (这里的SongName 指的是歌名,Artist指的是歌手名

            接下来我们看下实际的操作:

        比如说我们请求

                            http://geci.me/api/lyric/海阔天空       

            则我们会接收到网页返回来一串字符串:

{
    "count": 15,
    "code": 0,
    "result":
        [
            {"aid": 1563419, "lrc": "http://s.geci.me/lrc/166/16685/1668536.lrc", "artist": "Beyond", "song": "\u6d77\u9614\u5929\u7a7a", "sid": 1668536},
            {"aid": 1571906, "lrc": "http://s.geci.me/lrc/167/16796/1679605.lrc", "artist": "Beyond", "song": "\u6d77\u9614\u5929\u7a7a", "sid": 1679605},
            {"aid": 1573814, "lrc": "http://s.geci.me/lrc/168/16819/1681961.lrc", "artist": "Beyond", "song": "\u6d77\u9614\u5929\u7a7a", "sid": 1681961},
            {"aid": 1618733, "lrc": "http://s.geci.me/lrc/174/17407/1740790.lrc", "artist": "\u5468\u534e\u5065", "song": "\u6d77\u9614\u5929\u7a7a", "sid": 1740790},
            {"aid": 1656038, "lrc": "http://s.geci.me/lrc/179/17907/1790768.lrc", "artist": "Beyond", "song": "\u6d77\u9614\u5929\u7a7a", "sid": 1790768},
            {"aid": 1718741, "lrc": "http://s.geci.me/lrc/187/18757/1875769.lrc", "artist": "Beyond", "song": "\u6d77\u9614\u5929\u7a7a", "sid": 1875769},
            {"aid": 1889264, "lrc": "http://s.geci.me/lrc/210/21070/2107014.lrc", "artist": "\u8d39\u7fd4", "song": "\u6d77\u9614\u5929\u7a7a", "sid": 2107014},
            {"aid": 2003267, "lrc": "http://s.geci.me/lrc/226/22642/2264296.lrc", "artist": "Beyond", "song": "\u6d77\u9614\u5929\u7a7a", "sid": 2264296},
            {"aid": 2020610, "lrc": "http://s.geci.me/lrc/228/22889/2288967.lrc", "artist": "Beyond", "song": "\u6d77\u9614\u5929\u7a7a", "sid": 2288967},
            {"aid": 2051678, "lrc": "http://s.geci.me/lrc/233/23323/2332322.lrc", "artist": "Beyond", "song": "\u6d77\u9614\u5929\u7a7a", "sid": 2332322},
            {"aid": 2075717, "lrc": "http://s.geci.me/lrc/236/23651/2365157.lrc", "artist": "\u8d39\u7fd4", "song": "\u6d77\u9614\u5929\u7a7a", "sid": 2365157},
            {"aid": 2253359, "lrc": "http://s.geci.me/lrc/261/26128/2612812.lrc", "artist": "\u9ec4\u79cb\u751f", "song": "\u6d77\u9614\u5929\u7a7a", "sid": 2612812},
            {"aid": 2319680, "lrc": "http://s.geci.me/lrc/270/27055/2705565.lrc", "artist": "\u4efb\u8d24\u9f50", "song": "\u6d77\u9614\u5929\u7a7a", "sid": 2705565},
            {"aid": 2346662, "lrc": "http://s.geci.me/lrc/274/27442/2744281.lrc", "artist": "\u6797\u5b50\u7965", "song": "\u6d77\u9614\u5929\u7a7a", "sid": 2744281},
            {"aid": 2412272, "lrc": "http://s.geci.me/lrc/283/28370/2837015.lrc", "artist": "DJ Tommy", "song": "\u6d77\u9614\u5929\u7a7a", "sid": 2837015}
        ]
}
       

            这样的一串字符串则为JSON,至于如何解析等下再来。获取到网页这么一串字符串我们最后怎么解析。

           首先我们要先获取到这么一串字符串,当然是通过URL网页请求来获取内容:

    

public static String NewToolString(String path)
    {
	DefaultHttpClient client1 = new DefaultHttpClient();
	/** NameValuePair是传送给服务器的请求参数 param.get("name") **/

	UrlEncodedFormEntity entity1 = null;

	/** 新建一个get请求 **/
	HttpGet get = new HttpGet(path);
	HttpResponse response1 = null;
	String strResult1 = "";
	try
	{
	    /** 客服端向服务器发送请求 **/
	    response1 = client1.execute(get);
	} catch (ClientProtocolException e)
	{

	    e.printStackTrace();
	} catch (IOException e)
	{
	    // TODO Auto-generated catch block
	    e.printStackTrace();
	}
	/** 请求发送成功,并得到响应 **/
	if (response1.getStatusLine().getStatusCode() == 200)
	{
	    try
	    {
		/** 读取服务器返回过来的json字符串数据 **/
		strResult1 = EntityUtils.toString(response1.getEntity());
		return strResult1;

	    } catch (IllegalStateException e)
	    {
		// TODO Auto-generated catch block
		e.printStackTrace();
	    } catch (IOException e)
	    {
		// TODO Auto-generated catch block
		e.printStackTrace();
	    }
	}
	return  "";
    }

      参数path:则为我们传进去的请求网页比如      http://geci.me/api/lyric/童话/光良 

       获取到这么一串字符串,我们就要开始解析,这里我就简单的提一下解析,想要更深入了解可以去看书籍以及视频,

记得我很早之前学习的时候是通过老罗的视频第一季学习的。


     JSON格式 都是以键值对存在   一个{}为一个JSON对象 当然{}里面还可以嵌套一个{} 或[] 数组

  {

       “count”:1;

        “code”:0

       "result":

            [

               {},

                {}

             ]

 从上面可以看出 result 是一个数组 数组里面都为一个JSON对象  一次类推,通过JSON数组的下标继续访问里面的键值对

具体怎么访问,接下来 铁代码

 public static void getInfors(String jString)
    {
	 
           try
	{
	    JSONObject jsonObject = new JSONObject(jString);
	    int count = jsonObject.getInt("count");
	    Log.i("TAG", count + "");
	    int code = jsonObject.getInt("code");
	    Log.i("TAG", code + "");
	    // JSONObject result=jsonObject.getJSONObject("result");
	    JSONArray result = jsonObject.getJSONArray("result");
	    if (result.length() != 0)
	    {
		for (int i = 0; i < result.length(); i++)
		{

		    JSONObject jsonObject2 = result.getJSONObject(i);
		    int aid = jsonObject2.getInt("aid");
		    Log.i("TAG", aid + "");
		    String lrc = jsonObject2.getString("lrc");
		    Log.i("TAG", lrc);
		    String song = jsonObject2.getString("song");
		    Log.i("TAG", song);
		    int artist_id = jsonObject2.getInt("artist_id");
		    Log.i("TAG", artist_id + "");
		    int sid = jsonObject2.getInt("sid");
		    Log.i("TAG", sid + "");
		}

	    }
	} catch (JSONException e)
	{
	    // TODO Auto-generated catch block
	    e.printStackTrace();
	}
	 
    }

             代码为什么这羊可以去琢磨一下,这里不做解析,重点是讲从服务器怎么获取怎么解析。

    

            

        我用日志打出了崔后解析的结果 就像上图一样。

          其他的API接口也是一样的使用。只是服务器返回的信息不一样 解析的信息不一样而已,

         

     

      
 

  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值