
1.json格式化验证
/
Json键值对里面的键一定要是字符串
2 Json转Bean 工具
.php
3 Json解析 看根目录是[] 还是{} []使用JsonArray 否则使用JsonObject
4JsonReader 专门用于对流的直接解析 而一般的JsonArray,JsonObject是对字符串做的解析.
对于Object类型 选择reader.beginObject();
//解析体
dObject();
//解析体具体写法
while (reader.hasNext()) {name = Name();if (name.equals("artwork_url")) {String artworkUrl = String();//图片
mTrackObject.setArtworkUrl(artworkUrl);Log.d(TAG, "parsingListTrackObjectBySoundCloudGenre: artworkwurl?" + artworkUrl);} else if (name.equals("duration")) {Long duration = Long(); //时长
mTrackObject.setDuration(duration);Log.d(TAG, "parsingListTrackObjectBySoundCloudGenre: duration?" + duration);} else if (name.equals("user")) {reader.skipValue();} else {reader.skipValue();}
}
对于Array类型 选择reader.beginArray();
//解析体
dArray();
//解析体具体写法
while(reader.hasNext()){} : 如果解析体有数据Name();
Returns the next token 返回下一个解析键 并往下解析
String(); //nextLong ,nextBoolean etc. 返回下一个对应的解析值 并往下解析reader.skipValue(); 跳过该值,并往下解析//这行代码一定要行不然reader类不会对不匹配的键值对自动跳过 从而解析失败else { reader.skipValue();}
if (name.equals("collection")) {reader.beginArray();while (reader.hasNext()) {reader.beginObject();TrackObject mTrackObject = new TrackObject();mTrackObject.setGenre(genre);while (reader.hasNext()) {name = Name();if (name.equals("track")) {reader.beginObject();while (reader.hasNext()) {name = Name();if (name.equals("artwork_url")) {String artworkUrl = String();//图片
mTrackObject.setArtworkUrl(artworkUrl);} else if (name.equals("user")) {reader.skipValue();} else {reader.skipValue();}}dObject();
//歌手暂时不加
} else if (name.equals("score")) {int score = Int();} else {reader.skipValue();}}mTrackObject.setUsername("anymous"); listTrackObjects.add(mTrackObject); dObject();}dArray();
try {JsonReader reader = new JsonReader(new InputStreamReader(in, "UTF-8"));String genre = null;String kind = null;reader.beginObject();while (reader.hasNext()) {String name = Name();if (name.equals("genre")) {genre = String();Log.d(TAG, "parsingListTrackObjectBySoundCloudGenre: genre??" + genre);} else if (name.equals("kind")) {kind = String();Log.d(TAG, "parsingListTrackObjectBySoundCloudGenre: kind??" + kind);} else if (name.equals("collection")) {reader.beginArray();while (reader.hasNext()) {reader.beginObject();TrackObject mTrackObject = new TrackObject();mTrackObject.setGenre(genre);while (reader.hasNext()) {name = Name();if (name.equals("track")) {reader.beginObject();while (reader.hasNext()) {name = Name();if (name.equals("artwork_url")) {String artworkUrl = String();//图片
mTrackObject.setArtworkUrl(artworkUrl);Log.d(TAG, "parsingListTrackObjectBySoundCloudGenre: artworkwurl?" + artworkUrl);} else if (name.equals("duration")) {Long duration = Long(); //时长
mTrackObject.setDuration(duration);Log.d(TAG, "parsingListTrackObjectBySoundCloudGenre: duration?" + duration);} else if (name.equals("id")) {mTrackObject.Long());} else if (name.equals("permalink_url")) {String permalinUrl = String();//链接
mTrackObject.setPermalinkUrl(permalinUrl);Log.d(TAG, "parsingListTrackObjectBySoundCloudGenre: permalink?" + permalinUrl);} else if (name.equals("title")) {String title = String(); //歌名
mTrackObject.setTitle(title);Log.d(TAG, "parsingListTrackObjectBySoundCloudGenre: title?" + title);}/* else if (name.equals("uri")) {
String uri = String(); //歌名
mTrackObject.setPermalinkUrl(uri);
Log.d(TAG, "parsingListTrackObjectBySoundCloudGenre: uri?" + uri);
} */ else if (name.equals("waveform_url")) {String waveform_url = String(); //波形
mTrackObject.setWaveForm(waveform_url);Log.d(TAG, "parsingListTrackObjectBySoundCloudGenre: waveform_url?" + waveform_url);} else if (name.equals("user")) {reader.skipValue();} else {reader.skipValue();}}dObject();
//歌手暂时不加
} else if (name.equals("score")) {int score = Int();Log.d(TAG, "parsingListTrackObjectBySoundCloudGenre: score??" + score);} else {reader.skipValue();}}mTrackObject.setUsername("anymous");mTrackObject.setPlaybackCount(999);mTrackObject.setGenre(genre);mTrackObject.setStreamable(true);mTrackObject.setDownloadable(true);listTrackObjects.add(mTrackObject);Log.d(TAG, "parsingListTrackObjectBySoundCloudGenre: list size?" + listTrackObjects.size());dObject();}dArray();} else if (name.equals("last_updated")) {String last_updated = String();}}dObject();reader.close();Log.d(TAG, "parsingListTrackObjectBySoundCloudGenre: listkk size??" + listTrackObjects.size());} catch (Exception e) {e.printStackTrace();Log.d(TAG, "parsingListTrackObjectBySoundCloudGenre: 程序出错");} finally {if (in != null) {try {in.close();} catch (IOException e) {e.printStackTrace();}}}
对应 Json文件 :
{
"genre":"soundcloud:genres:all-music",
"kind":"top",
"last_updated":"2017-04-04T08:07:33Z",
"collection":[
{
"track":{
"artwork_url":".jpg",
"commentable":true,
"comment_count":5712,
"created_at":"2017-02-26T22:16:38Z",
"description":"LUV IS RAGE 2 COMING SOON",
"downloadable":false,
"download_count":0,
"download_url":null,
"duration":179948,
"full_duration":179948,
"embeddable_by":"all",
"genre":"Alternative Rock",
"has_downloads_left":true,
"id":309689093,
"kind":"track",
"label_name":null,
"last_modified":"2017-04-05T01:26:31Z",
"license":"all-rights-reserved",
"likes_count":704051,
"permalink":"15-xo-tour-llif3",
"permalink_url":"",
"playback_count":40332491,
"public":true,
"publisher_metadata":Object{...},
"purchase_title":null,
"purchase_url":null,
"release_date":null,
"reposts_count":79354,
"secret_token":null,
"sharing":"public",
"state":"finished",
"streamable":true,
"tag_list":"",
"title":"1.5- XO TOUR Llif3 (Produced By TM88)",
"uri":"",
"urn":"soundcloud:tracks:309689093",
"user_id":10494998,
"visuals":null,
"waveform_url":".json",
"display_date":"2017-02-26T22:16:38Z",
"monetization_model":"NOT_APPLICABLE",
"policy":"ALLOW",
"user":{
"avatar_url":".png?1491306653",
"first_name":"",
"full_name":"",
"id":10494998,
"kind":"user",
"last_modified":"2017-04-04T03:20:26Z",
"last_name":"",
"permalink":"liluzivert",
"permalink_url":"",
"uri":"",
"urn":"soundcloud:users:10494998",
"username":"LIL UZI VERT",
"verified":false,
"city":"PHILADELPHIA",
"country_code":"US"
}
},
"score":6300458
},
{
"track":Object{...},
"score":4428696
},
Object{...},
Object{...},
Object{...},
Object{...},
Object{...},
Object{...},
Object{...},
Object{...},
Object{...},
Object{...},
Object{...},
Object{...}
],
"query_urn":"soundcloud:charts:20e90a449de84c368d76fdc6a167ca02",
"next_href":"=soundcloud%3Agenres%3Aall-music&query_urn=soundcloud%3Acharts%3A20e90a449de84c368d76fdc6a167ca02&offset=20&kind=top&limit=20"
}
5Json解析最全基础:
我们要学习使用JSON解析,必须对JSON解析的规则原理有深刻的认识和了解,然后才知道它的一个实现原理
JSON里面的数据是以一种键值对的方式存在
(”key”:”value”)中值的类型可以是下面数据类型中的任意一种:
1. 数字(整数或浮点数)
2. 逻辑值(true 或 false)
3. 字符串(在双引号中)
4. 数组(在方括号中)
5. 函数
6. 对象(在大括号中)
7. null
JSON的语法规则非常的简单,就是使用
大括号’{}’, 对象标记
中括号’[]’, 数组标记
逗号’,’, 数据标记
冒号’:’, 键值对标记
双引号’“”’ 字符串标记
数据类型:
嵌套对象、数组、字符串、数字、布尔值或空值。
我们在JSON解析中只有三中情况出现
1.{} 解析’大括号’类型
2. [ ] 解析是’中括号’类型
3. 其实只有两种,那第三种则是1与2的组合方法即”{’name’:’李书豪’ ,’hobby’:[‘编程’,’电竞’,’睡觉’]}”那么下面分别来看一些这三种类型以及解析
JSON解析一定要掌握的两条规则:
掌握了JSON的数据类型和基本语法后,下面我们将对JSON的各种语法类型进行详细解析(注意掌握两条规则的使用,掌握了JSON解析就那么回事)
纯对象(Object)的解析{ }:
[java] view plain copy print ?
小结: {[ {},{} ]}–>思路:第一步看到大括号:JSONObject去解,创建好对应里面的属性的值;第二步看到中括号:JSONArray去解析 对应创建好对应里面的属性值;第三步中括号里面的{},又是一个JSONObject。思路大致如此,强调注意的是,设置的属性值setXxx getXxx必须要和去获得值名称一致,不然会出错!!
[java] view plain copy print ?
因为数据略大,不方便咱们看,这里给大家提供一个JSON在线解析工具/ 这是JSON在线高亮解析 ,可以很好的帮助咱们进行解析分析。下面是我用网页解析好的图片,可以思考下步骤(记住两条规则)
分析:
一:第一个大括号(JSONObject){”desc”: “status”: “data”}
二:大括号里面有一个大括号(JSONObject){”wendu”: “20”, “ganmao”: “forecast”: “yesterday”: “aqi”: “city”: }
三:第二个大括号里面有两个对象 1.数组形(JSONArray) 2.对象形( JSONObject )
而数组形里面又套有数组的对象{} 。这就需要咱们在解析的时候需要很细致的去创建对应的属性值,JSON解析并不难,而难受的地方就提现在对类的创建中,只要够细心也超简单!
[java] view plain copy print ?
结语: 对于JSON解析个人的粗浅看法,
1.首先是对JSON数据的一个分析
2.其次是掌握JSON一些技巧(两条规则–对象形JSONObject ,数组形JSONArray)
3.而后是对对应的属性值进行对应的字段封装建立对应的类(分析要细心,思路要清晰,程序这行需要有耐心不能浮躁)
4.而后是解析中要有明确的思路
(以上只是一个JSON初步的解析,但JSON解析的大致思路如此,后面有http套用的,无非也就把下载的文件转为JSON对象,后面解析思路也是如此,写的不好的地方大家包涵!有啥问题,欢迎留言!)
6 jackson, gson ,fastjson 对比
[java] view plain copy
注意:只对VO起作用,Map List不起作用,另外jackson还能过滤掉你设置的属性,具体的就各位自己去研究源码了
本文发布于:2024-02-04 12:48:06,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170707608355712.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
| 留言与评论(共有 0 条评论) |