通过服务器返回来JSON歌词数据进行解析
来源:互联网 发布:mac转音频格式 编辑:程序博客网 时间:2024/06/10 05:36
前言:很多初学者学到一定的知识时候,会想说 我们从服务端怎么接受数据,最近在做一个音乐播放器,前段时间自己弄了自定义歌词滚动,后来发现 这个满足不了,歌词文件怎么办,想到了去服务器下载。于是我找了很多 比如说QQ音乐,百度音乐,酷狗音乐,好像都没有提供API ,最后找到了一个交歌词迷的API。虽然资源比较少,但是凑合着用,毕竟免费的,接下来 来展示下从服务器如何接受数据。
从服务器接收回来的数据一般有两种格式 一种是json/xml
JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式。它基于ECMAScript的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族的习惯(包括C、C++、C#、Java、JavaScript、Perl、Python等)。这些特性使JSON成为理想的数据交换语言。 易于人阅读和编写,同时也易于机器解析和生成(一般用于提升网络传输速率)。
XML
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 blocke.printStackTrace(); } catch (IOException e) {// TODO Auto-generated catch blocke.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接口也是一样的使用。只是服务器返回的信息不一样 解析的信息不一样而已,
- 通过服务器返回来JSON歌词数据进行解析
- 通过Http地址返回JSON数据,进行解析;通过ftp返回.txt文件数据,进行解析;
- Android解析服务器返回的Json数据
- 服务器返回的json数据,通过本地解析调用SBjson的类
- android 客户端访问自己建立的服务器并返回JSON数据进行解析学习
- 通过服务器返回的数据来创建子控制器
- 如何通过jquery解析从服务器端返回的json数据
- 中央气象局天气预报接口---返回JSON数据,进行解析
- jquery eval()解析JSON,ajax通过return返回数据,js读取解析JSON数据
- Android入门:通过JSON数据与服务器进行通信
- Android入门:通过JSON数据与服务器进行通信
- Android入门:通过JSON数据与服务器进行通信
- Android入门:通过JSON数据与服务器进行通信
- android开发解析服务器返回的JSON数据
- 解析服务器返回的Json 数据的工具类
- 一个完整的通过encoding/json信息传递格式,采用http.POST利用进行与服务器通信,并对返回结果进行解析处理的典型案例
- 001-实现Unity3d通过Http协议 向PHP服务器发送和解析Json格式数据 并进行测试
- 通过java代码对json格式数据进行解析
- Tomcat
- Java中获取键盘输入值的三种方法
- leetcode-java-34. Search for a Range
- django学习教程(二)理解django框架的逻辑结构,创建第一个app
- 响应式布局基本实现Media Query(媒介查询)
- 通过服务器返回来JSON歌词数据进行解析
- JAVA 课堂笔记
- setsockopt
- Eclipse常用快捷键
- Nim游戏,Grundy函数介绍
- nodejs模块加载的猜想
- HDU2018
- mysql 单表查询 空值查询
- for循环入门