Jason解析基础、 相关类库以及FastJSON、Gson和Jackson

1.json格式化验证

http://www.json.cn/


Json键值对里面的键一定要是字符串


2 Json转Bean 工具

http://www.atool.org/json2javabean.php


3 Json解析  看根目录是[]  还是{}     []使用JsonArray   否则使用JsonObject



4JsonReader  专门用于对流的直接解析   而一般的JsonArray,JsonObject是对字符串做的解析.

对于Object类型  选择reader.beginObject();     

                          //解析体

 reader.endObject();  


//解析体具体写法

while (reader.hasNext()) {
    name = reader.nextName();
    if (name.equals("artwork_url")) {

        String artworkUrl = reader.nextString();//图片
        mTrackObject.setArtworkUrl(artworkUrl);
        Log.d(TAG, "parsingListTrackObjectBySoundCloudGenre: artworkwurl?" + artworkUrl);
    } else if (name.equals("duration")) {
        Long duration = reader.nextLong();  //时长
        mTrackObject.setDuration(duration);
        Log.d(TAG, "parsingListTrackObjectBySoundCloudGenre: duration?" + duration);

    } else if (name.equals("user")) {
        reader.skipValue();
    } else {
        reader.skipValue();
    }
}

对于Array类型  选择reader.beginArray();     

                          //解析体

 reader.endArray();  


//解析体具体写法

  while(reader.hasNext()){}   : 如果解析体有数据 

reader.nextName(); 
 Returns the next token  返回下一个解析键 并往下
解析

reader.nextString();   //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 = reader.nextName();
                                if (name.equals("track")) {
                                    reader.beginObject();
                                    while (reader.hasNext()) {
                                        name = reader.nextName();
                                        if (name.equals("artwork_url")) {

                                            String artworkUrl = reader.nextString();//图片
                                            mTrackObject.setArtworkUrl(artworkUrl);
                                       
                                        } else if (name.equals("user")) {
                                            reader.skipValue();
                                        } else {
                                            reader.skipValue();
                                        }
                                    }


                                    reader.endObject();
//歌手暂时不加

                                } else if (name.equals("score")) {
                                    int score = reader.nextInt();
                                 

                                } else {
                                    reader.skipValue();
                                }


                            }

                            mTrackObject.setUsername("anymous");                         
                            listTrackObjects.add(mTrackObject);                       

                            reader.endObject();
                        }
                        reader.endArray();


 try {
                JsonReader reader = new JsonReader(new InputStreamReader(in, "UTF-8"));

                String genre = null;
                String kind = null;
                reader.beginObject();
                while (reader.hasNext()) {

                    String name = reader.nextName();
                    if (name.equals("genre")) {

                        genre = reader.nextString();
                        Log.d(TAG, "parsingListTrackObjectBySoundCloudGenre: genre??" + genre);

                    } else if (name.equals("kind")) {
                        kind = reader.nextString();
                        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 = reader.nextName();
                                if (name.equals("track")) {
                                    reader.beginObject();
                                    while (reader.hasNext()) {
                                        name = reader.nextName();
                                        if (name.equals("artwork_url")) {

                                            String artworkUrl = reader.nextString();//图片
                                            mTrackObject.setArtworkUrl(artworkUrl);
                                            Log.d(TAG, "parsingListTrackObjectBySoundCloudGenre: artworkwurl?" + artworkUrl);
                                        } else if (name.equals("duration")) {
                                            Long duration = reader.nextLong();  //时长
                                            mTrackObject.setDuration(duration);
                                            Log.d(TAG, "parsingListTrackObjectBySoundCloudGenre: duration?" + duration);

                                        } else if (name.equals("id")) {
                                            mTrackObject.setId(reader.nextLong());

                                        } else if (name.equals("permalink_url")) {
                                            String permalinUrl = reader.nextString();//链接
                                            mTrackObject.setPermalinkUrl(permalinUrl);
                                            Log.d(TAG, "parsingListTrackObjectBySoundCloudGenre: permalink?" + permalinUrl);
                                        } else if (name.equals("title")) {
                                            String title = reader.nextString();  //歌名
                                            mTrackObject.setTitle(title);
                                            Log.d(TAG, "parsingListTrackObjectBySoundCloudGenre: title?" + title);
                                        }/* else if (name.equals("uri")) {
                                            String uri = reader.nextString();  //歌名
                                            mTrackObject.setPermalinkUrl(uri);
                                            Log.d(TAG, "parsingListTrackObjectBySoundCloudGenre: uri?" + uri);
                                        } */ else if (name.equals("waveform_url")) {
                                            String waveform_url = reader.nextString();  //波形
                                            mTrackObject.setWaveForm(waveform_url);
                                            Log.d(TAG, "parsingListTrackObjectBySoundCloudGenre: waveform_url?" + waveform_url);
                                        } else if (name.equals("user")) {
                                            reader.skipValue();
                                        } else {
                                            reader.skipValue();
                                        }
                                    }


                                    reader.endObject();
//歌手暂时不加

                                } else if (name.equals("score")) {
                                    int score = reader.nextInt();
                                    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());

                            reader.endObject();
                        }
                        reader.endArray();
                    } else if (name.equals("last_updated")) {
                        String last_updated = reader.nextString();
                    }


                }
                reader.endObject();

                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":"https://i1.sndcdn.com/artworks-000209741436-qfq484-large.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":"https://soundcloud.com/liluzivert/15-xo-tour-llif3",
                "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":"https://api.soundcloud.com/tracks/309689093",
                "urn":"soundcloud:tracks:309689093",
                "user_id":10494998,
                "visuals":null,
                "waveform_url":"https://wis.sndcdn.com/yUlUifyRZcZV_m.json",
                "display_date":"2017-02-26T22:16:38Z",
                "monetization_model":"NOT_APPLICABLE",
                "policy":"ALLOW",
                "user":{
                    "avatar_url":"http://a1.sndcdn.com/images/default_avatar_large.png?1491306653",
                    "first_name":"",
                    "full_name":"",
                    "id":10494998,
                    "kind":"user",
                    "last_modified":"2017-04-04T03:20:26Z",
                    "last_name":"",
                    "permalink":"liluzivert",
                    "permalink_url":"https://soundcloud.com/liluzivert",
                    "uri":"https://api.soundcloud.com/users/10494998",
                    "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":"https://api-v2.soundcloud.com/charts?genre=soundcloud%3Agenres%3Aall-music&query_urn=soundcloud%3Acharts%3A20e90a449de84c368d76fdc6a167ca02&offset=20&kind=top&limit=20"
}


5Json解析最全基础:




JSON简介

  • JAVAScript Object Notation是一种轻量级的数据交换格式
  • 具有良好的可读和便于快速编写的特性。
  • 业内主流技术为其提供了完整的解决方案(有点类似于正则表达式 ,获得了当今大部分语言的支持)
  • JSON采用兼容性很高的文本格式,同时也具备类似于C语言体系的行为。 – Json.org
  • JSON作为数据是目前网络中主流的数据传输格式之一,应用十分广泛,说是使用率达到99%一点也不勉强

JSON支持的数据类型

我们要学习使用JSON解析,必须对JSON解析的规则原理有深刻的认识和了解,然后才知道它的一个实现原理 
JSON里面的数据是以一种键值对的方式存在 
(”key”:”value”)中值的类型可以是下面数据类型中的任意一种: 
1. 数字(整数或浮点数) 
2. 逻辑值(true 或 false) 
3. 字符串(在双引号中) 
4. 数组(在方括号中) 
5. 函数 
6. 对象(在大括号中) 
7. null

JSON语法规则

JSON的语法规则非常的简单,就是使用 
大括号’{}’,  对象标记
中括号’[]’,   数组标记
逗号’,’,     数据标记
冒号’:’,   键值对标记
双引号’“”’   字符串标记

数据类型: 
嵌套对象、数组、字符串、数字、布尔值或空值。

我们在JSON解析中只有三中情况出现 
1.{} 解析’大括号’类型 
2. [ ] 解析是’中括号’类型 
3. 其实只有两种,那第三种则是1与2的组合方法即”{’name’:’李书豪’ ,’hobby’:[‘编程’,’电竞’,’睡觉’]}”那么下面分别来看一些这三种类型以及解析

JSON基本语法与图例

  • Object(对象类型) 
    • 用{ }包含一系列无序的key–Value键值对表示,其中Key和Value之间用冒号分割,每个key-value之间用逗号分割。
    • 比如:这里写图片描述
  • Array(数组类型) 
    • 使用[ ]包含所有元素,每个元素用逗号分隔,元素可以是任意的值
    • 比如:这里写图片描述
  • 组合形 
    • 这里写图片描述 
      这里写图片描述

JSON数据解析

  • JSON解析一定要掌握的两条规则:

    • 1.如果看到是{ }–>使用JSONObject
    • 2.如果看到的[ ]–>使用JSONArray解析
  • 掌握了JSON的数据类型和基本语法后,下面我们将对JSON的各种语法类型进行详细解析(注意掌握两条规则的使用,掌握了JSON解析就那么回事)

纯对象(Object)的解析{ }:

[java]  view plain   copy
  print ? 在CODE上查看代码片 派生到我的代码片
  1. import org.json.JSONException;  
  2. import org.json.JSONObject;  
  3.   
  4. /** 
  5.  * JSON-->纯对象(Object)的解析 
  6.  *  
  7.  * 注:我们在eclipse里面操作JSON解析的时候需要第三方jar包的支持 
  8.  * @author sKy° 
  9.  * @date 2016-5-8 
  10.  * @version 1.0 
  11.  */  
  12. public class Json01 {  
  13.     public static void main(String[] args) {  
  14. //      编辑一个我们要解析的数据对象  
  15. //     根据JSON的官方定义,键,加"",值,如果是字符串,就加"",其他不加。  
  16.         String json="{'name':'李书豪','age':24}";  
  17.   
  18.         try {  
  19. //          创建JSON解析对象(两条规则的体现:大括号用JSONObject,注意传入数据对象)  
  20.             JSONObject obj = new JSONObject(json);  
  21. //          obj.后面有各种数据类型,根据对象来选择使用的数据类型  
  22.             String name = obj.getString("name");  
  23. //          同理如上,这里的age为Int类型,我们就用对应的类型进行解析  
  24.             int age = obj.getInt("age");  
  25. //          最后输出到控制台  
  26.             System.out.println(name+"<--->"+age);  
  27.   
  28.         } catch (JSONException e) {  
  29.             e.printStackTrace();  
  30.         }  
  31.   
  32.     }  
  33. }  

这里写图片描述

纯数组(Array)的解析{ }:
[java]  view plain   copy
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在Eclipse中导入j2mod库和相关的类,请按照以下步骤进行操作: 1. 下载j2mod库:您可以从j2mod库的官方网站(http://j2mod.sourceforge.net)下载最新版本的j2mod库。 2. 解压下载的j2mod库文件:将下载的j2mod库文件解压到一个你喜欢的位置。 3. 在Eclipse中创建一个新的Java项目:选择"File" -> "New" -> "Java Project",输入项目名称并点击"Finish"。 4. 将j2mod库添加到项目的构建路径中:在Eclipse中,右键单击项目,选择"Build Path" -> "Configure Build Path"。在弹出的窗口中,选择"Libraries"标签,然后点击"Add External JARs"按钮。浏览并选择您解压的j2mod库文件夹中的jar文件(例如j2mod-1.2.1.jar),然后点击"Open"和"OK"以添加库到构建路径中。 5. 导入所需的j2mod类:在Eclipse的Java项目中,右键单击您希望使用j2mod类的包(例如src文件夹),选择"Import" -> "General" -> "File System"。点击"Next",然后点击"Browse"并导航到您解压的j2mod库文件夹中的源代码文件夹(例如j2mod-1.2.1-src/src/main/java)。选中所需的类文件,然后点击"Finish"以将它们导入到您的项目中。 现在,您已经成功地将j2mod库和相关的类导入到Eclipse项目中。您可以在项目中使用这些类来进行Modbus通信和操作。 请注意,在使用j2mod库时,您可能还需要导入其他相关的第三方库,例如SLF4J(用于日志记录)和Apache Commons Lang(用于一些辅助功能)。请根据您的具体需求和使用情况,按照类似的步骤将这些库添加到您的项目中。 希望这可以帮助您成功导入j2mod库和相关的类到Eclipse。如果您有任何疑问,请随时提问!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值