JSON lib https://www.e-learn.cn/tag/json-lib zh-hans json 的使用 Java对象转json https://www.e-learn.cn/topic/3997834 <span>json 的使用 Java对象转json</span> <span><span lang="" about="/user/155" typeof="schema:Person" property="schema:name" datatype="">和自甴很熟</span></span> <span>2021-01-13 07:17:00</span> <div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"> <p>1、 jsonlib:个人感觉最麻烦的一个需要导入的包也多,代码也相对多一些。</p> <p> </p> <p>2、Gson:google的</p> <p> </p> <p>3、FastJson:阿里巴巴的,个人觉得这个比较好,而且据说这个也是性能最好一个。</p> <p> </p> <p>下面就贴出三种写法的代码,读者可以任选其一去使用。关于demo里面所使用的jar包,可以自行去下载,也可以加我QQ我给你:1140459171</p> <span id="OSC_h2_1"></span> <h2>Jsonlib:package json;</h2> <pre><code class="hljs avrasm hljs"> import java<span><span>.util<span><span>.ArrayList<span><span>; import java<span><span>.util<span><span>.List<span><span>; import net<span><span>.sf<span><span>.json<span><span>.JSONArray<span><span>; import user<span><span>.User<span><span>; public class Jsonlib { public static void main(String[] args) { User user1 = new User()<span><span>; user1<span><span>.setUsername(<span><span>"111")<span><span>; user1<span><span>.setPassword(<span><span>"111")<span><span>; User user2 = new User()<span><span>; user2<span><span>.setUsername(<span><span>"222")<span><span>; user2<span><span>.setPassword(<span><span>"222")<span><span>; List&lt;User&gt; lists = new ArrayList&lt;User&gt;()<span><span>; lists<span><span>.add(user1)<span><span>; lists<span><span>.add(user2)<span><span>; JSONArray fromObject1 = JSONArray<span><span>.fromObject(user1)<span><span>; JSONArray fromObject2 = JSONArray<span><span>.fromObject(lists)<span><span>; String str1 = fromObject1<span><span>.toString()<span><span>; String str2 = fromObject2<span><span>.toString()<span><span>; System<span><span>.out<span><span>.println(str1)<span><span>; //打印结果 //[{<span><span>"password":<span><span>"111",<span><span>"username":<span><span>"111"}] System<span><span>.out<span><span>.println(str2)<span><span>; //打印结果 //[{<span><span>"password":<span><span>"111",<span><span>"username":<span><span>"111"},{<span><span>"password":<span><span>"222",<span><span>"username":<span><span>"222"}] } }</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre> <p>jar:</p> <p><img alt="" class="b-lazy" data-src="https://oscimg.oschina.net/oscnet/3d5898770d989e29bb76378752c4440d36b.png" data-original="https://oscimg.oschina.net/oscnet/3d5898770d989e29bb76378752c4440d36b.png" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" /></p> <span id="OSC_h2_2"></span> <h2>Gson:</h2> <pre><code class="hljs avrasm hljs">package json<span><span>; import java<span><span>.util<span><span>.ArrayList<span><span>; import java<span><span>.util<span><span>.List<span><span>; import <span><span>com<span><span>.google<span><span>.gson<span><span>.Gson<span><span>; import user<span><span>.User<span><span>; public class Gson_a { public static void main(String[] args) { User user1 = new User()<span><span>; user1<span><span>.setUsername(<span><span>"111")<span><span>; user1<span><span>.setPassword(<span><span>"111")<span><span>; User user2 = new User()<span><span>; user2<span><span>.setUsername(<span><span>"222")<span><span>; user2<span><span>.setPassword(<span><span>"222")<span><span>; List&lt;User&gt; lists = new ArrayList&lt;User&gt;()<span><span>; lists<span><span>.add(user1)<span><span>; lists<span><span>.add(user2)<span><span>; Gson gson = new Gson()<span><span>; String json1 = gson<span><span>.toJson(user1)<span><span>; System<span><span>.out<span><span>.println(json1)<span><span>; //打印结果 //{<span><span>"username":<span><span>"111",<span><span>"password":<span><span>"111"} String json2 = gson<span><span>.toJson(lists)<span><span>; System<span><span>.out<span><span>.println(json2)<span><span>; //打印结果 //[{<span><span>"username":<span><span>"111",<span><span>"password":<span><span>"111"},{<span><span>"username":<span><span>"222",<span><span>"password":<span><span>"222"}] } }</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre> <p>jar:</p> <p><img alt="" class="b-lazy" data-src="https://oscimg.oschina.net/oscnet/526615266b7c7fb33094c987e6fee8e7af3.png" data-original="https://oscimg.oschina.net/oscnet/526615266b7c7fb33094c987e6fee8e7af3.png" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" /></p> <p><a name="t1" rel="nofollow" id="t1"></a></p> <span id="OSC_h2_3"></span> <h2>FastJson:</h2> <pre><code class="hljs avrasm hljs">package json<span><span>; import java<span><span>.util<span><span>.ArrayList<span><span>; import java<span><span>.util<span><span>.List<span><span>; import <span><span>com<span><span>.alibaba<span><span>.fastjson<span><span>.JSON<span><span>; import user<span><span>.User<span><span>; public class FastJson { public static void main(String[] args) { User user1 = new User()<span><span>; user1<span><span>.setUsername(<span><span>"111")<span><span>; user1<span><span>.setPassword(<span><span>"111")<span><span>; //<span><span>1、单个对象转换成json String jsonString = JSON<span><span>.toJSONString(user1)<span><span>; System<span><span>.out<span><span>.println(jsonString)<span><span>; //打印结果 //{<span><span>"password":<span><span>"111",<span><span>"username":<span><span>"111"} User user2 = new User()<span><span>; user2<span><span>.setUsername(<span><span>"222")<span><span>; user2<span><span>.setPassword(<span><span>"222")<span><span>; List&lt;User&gt; lists = new ArrayList&lt;User&gt;()<span><span>; lists<span><span>.add(user1)<span><span>; lists<span><span>.add(user2)<span><span>; String jsonString2 = JSON<span><span>.toJSONString(lists)<span><span>; System<span><span>.out<span><span>.println(jsonString2)<span><span>; //打印结果 //[{<span><span>"password":<span><span>"111",<span><span>"username":<span><span>"111"},{<span><span>"password":<span><span>"222",<span><span>"username":<span><span>"222"}] } }</span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></span></code></pre> <p><img alt="" class="b-lazy" data-src="https://oscimg.oschina.net/oscnet/37a0652385a29a6813e30e68855aa4c8048.png" data-original="https://oscimg.oschina.net/oscnet/37a0652385a29a6813e30e68855aa4c8048.png" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" /></p> <div class="alert alert-success" role="alert"><p>来源:<code>oschina</code></p><p>链接:<code>https://my.oschina.net/u/4329662/blog/3639765</code></p></div></div> <div class="field field--name-field-tags field--type-entity-reference field--label-above"> <div class="field--label">标签</div> <div class="field--items"> <div class="field--item"><a href="/tag/fastjson" hreflang="zh-hans">fastjson</a></div> <div class="field--item"><a href="/tag/java" hreflang="zh-hans">java</a></div> <div class="field--item"><a href="/tag/gson" hreflang="zh-hans">gson</a></div> <div class="field--item"><a href="/tag/json-lib" hreflang="zh-hans">JSON lib</a></div> </div> </div> Tue, 12 Jan 2021 23:17:00 +0000 和自甴很熟 3997834 at https://www.e-learn.cn 请不要在 JDK 7+ 中使用这个 JSON 包了! https://www.e-learn.cn/topic/3737013 <span>请不要在 JDK 7+ 中使用这个 JSON 包了!</span> <span><span lang="" about="/user/48" typeof="schema:Person" property="schema:name" datatype="">白昼怎懂夜的黑</span></span> <span>2020-08-10 21:07:43</span> <div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"> <blockquote> <p>来源:大魔王mAysWINd www.cnblogs.com/mayswind/p/9222245.html</p> </blockquote> <p><strong>Json-lib 介绍</strong></p> <p>Json-lib 是以前 Java 常用的一个 Json 库,最后的版本是 2.4,分别提供了 JDK 1.3 和 1.5 的支持,最后更新时间是 2010年12月14日。</p> <p>虽然已经很多年不维护了,但在搜索引擎上搜索 <strong>"</strong><a href="http://mp.weixin.qq.com/s?__biz=MzI3ODcxMzQzMw==&amp;mid=2247489998&amp;idx=2&amp;sn=7116d75a81a4fd591afdb78553e1c38f&amp;chksm=eb539cf8dc2415eec2eaa593e6e9bca8cae37d6b798420ad883ded1340a8f228f27b56650601&amp;scene=21#wechat_redirect" rel="nofollow"><strong>Java Json</strong></a>**"**等相关的关键词发现好像一直还有人在介绍和使用这个库。</p> <p>项目官网是:</p> <blockquote> <p><a href="http://json-lib.sourceforge.net/" rel="nofollow">http://json-lib.sourceforge.net/</a></p> </blockquote> <p><strong>一句话结论</strong></p> <p>Json-lib 在通过字符串解析每一个 Json 对象时,会对当前解析位置到字符串末尾进行 substring 操作。</p> <p>由于 JDK7 及以上的 <a href="http://mp.weixin.qq.com/s?__biz=MzI3ODcxMzQzMw==&amp;mid=2247484799&amp;idx=1&amp;sn=40572745a062459cd3644740cd0821b3&amp;chksm=eb538049dc24095f1e95f707742c251cc79eb9e1a3ab144be035423d64a25611285be97f478e&amp;scene=21#wechat_redirect" rel="nofollow">substring </a>会完整拷贝截取后的内容,所以当遇到较大的 Json 数据并且含有较多对象时,会进行大量的字符数组复制操作,导致了大量的 CPU 和内存消耗,甚至严重的 Full GC 问题。</p> <p><strong>问题分析</strong></p> <p>某天发现线上生产服务器有不少 Full GC 问题,排查发现产生 Full GC 时某个老接口量会上涨,但这个接口除了解析 <a href="http://mp.weixin.qq.com/s?__biz=MzI3ODcxMzQzMw==&amp;mid=2247489998&amp;idx=2&amp;sn=7116d75a81a4fd591afdb78553e1c38f&amp;chksm=eb539cf8dc2415eec2eaa593e6e9bca8cae37d6b798420ad883ded1340a8f228f27b56650601&amp;scene=21#wechat_redirect" rel="nofollow"><strong>Json</strong></a>外就是将解析后的数据存储到了缓存中。</p> <p>遂怀疑跟接口请求参数大小有关,打日志发现确实有比一般请求大得多的 Json 数据,但也只有 1MB 左右。为了简化这个问题,编写如下的性能测试代码。</p> <pre><code>package net.mayswind; import net.sf.json.JSONObject; import org.apache.commons.io.FileUtils; import java.io.File; public class JsonLibBenchmark {     public static void main(String[] args) throws Exception {         String data = FileUtils.readFileToString(new File("Z:\\data.json"));         benchmark(data, 5);     }     private static void benchmark(String data, int count) {         long startTime = System.currentTimeMillis();         for (int i = 0; i &lt; count; i++) {             JSONObject root = JSONObject.fromObject(data);         }         long elapsedTime = System.currentTimeMillis() - startTime;         System.out.println(String.format("count=%d, elapsed time=%d ms, avg cost=%f ms", count, elapsedTime, (double) elapsedTime / count));     } } </code></pre> <p>上述代码执行后平均每次解析需要 7秒左右才能完成,如下图所示。</p> <p><img alt="" class="b-lazy" data-src="https://oscimg.oschina.net/oscnet/up-d7dcad8d16446078b7251b3cc245bb32f18.png" data-original="https://oscimg.oschina.net/oscnet/up-d7dcad8d16446078b7251b3cc245bb32f18.png" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" /></p> <p>测试用的 Json 文件,“...” 处省略了 34,018 个相同内容,整个 Json 数据中包含了 3万多个 Json 对象,实际测试的数据如下图所示。</p> <pre><code>{     "data":     [         {             "foo": 0123456789,             "bar": 1234567890         },         {             "foo": 0123456789,             "bar": 1234567890         },         ...     ] } </code></pre> <p><img alt="" class="b-lazy" data-src="https://oscimg.oschina.net/oscnet/up-d2ab60030f5c0b0df1ae67c1df51a2338d0.png" data-original="https://oscimg.oschina.net/oscnet/up-d2ab60030f5c0b0df1ae67c1df51a2338d0.png" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" /></p> <p>使用 Java Mission Control 记录执行的情况,如下图所示,可以看到分配了大量 char[] 数组。</p> <p><img alt="" class="b-lazy" data-src="," data-original="," src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" /></p> <p>翻看相关源码,其中 JSONObject._fromJSONTokener 方法主要内容如下所示。可以看到其在代码一开始就匹配是否为 "null" 开头。</p> <pre><code>private static JSONObject _fromJSONTokener(JSONTokener tokener, JsonConfig jsonConfig) {     try {         if (tokener.matches("null.*")) {             fireObjectStartEvent(jsonConfig);             fireObjectEndEvent(jsonConfig);             return new JSONObject(true);         } else if (tokener.nextClean() != '{') {             throw tokener.syntaxError("A JSONObject text must begin with '{'");         } else {             fireObjectStartEvent(jsonConfig);             Collection exclusions = jsonConfig.getMergedExcludes();             PropertyFilter jsonPropertyFilter = jsonConfig.getJsonPropertyFilter();             JSONObject jsonObject = new JSONObject(); ... </code></pre> <p>而 matches 方法更是直接用 substring 截取当前位置到末尾的字符串,然后进行正则匹配。</p> <pre><code>public boolean matches(String pattern) {     String str = this.mySource.substring(this.myIndex);     return RegexpUtils.getMatcher(pattern).matches(str); } </code></pre> <p>字符串 <a href="http://mp.weixin.qq.com/s?__biz=MzI3ODcxMzQzMw==&amp;mid=2247484799&amp;idx=1&amp;sn=40572745a062459cd3644740cd0821b3&amp;chksm=eb538049dc24095f1e95f707742c251cc79eb9e1a3ab144be035423d64a25611285be97f478e&amp;scene=21#wechat_redirect" rel="nofollow">substring </a>会传入字符数组、起始位置和截取长度创建一个新的 String 对象。</p> <pre><code>public String substring(int beginIndex) {     if (beginIndex &lt; 0) {         throw new StringIndexOutOfBoundsException(beginIndex);     }     int subLen = value.length - beginIndex;     if (subLen &lt; 0) {         throw new StringIndexOutOfBoundsException(subLen);     }     return (beginIndex == 0) ? this : new String(value, beginIndex, subLen); } </code></pre> <p>在 JDK7 及以上,调用该构造方法时在最后一行会复制一遍截取后的数据,这也是导致整个问题的关键所在了。</p> <pre><code>public String(char value[], int offset, int count) {     if (offset &lt; 0) {         throw new StringIndexOutOfBoundsException(offset);     }     if (count &lt;= 0) {         if (count &lt; 0) {             throw new StringIndexOutOfBoundsException(count);         }         if (offset &lt;= value.length) {             this.value = "".value;             return;         }     }     // Note: offset or count might be near -1&gt;&gt;&gt;1.     if (offset &gt; value.length - count) {         throw new StringIndexOutOfBoundsException(offset + count);     }     this.value = Arrays.copyOfRange(value, offset, offset+count); } </code></pre> <p><strong>推荐去我的博客阅读更多:</strong></p> <p>1.<a href="http://www.javastack.cn/categories/Java/" rel="nofollow">Java JVM、集合、多线程、新特性系列教程</a></p> <p>2.<a href="http://www.javastack.cn/categories/Spring/" rel="nofollow">Spring MVC、Spring Boot、Spring Cloud 系列教程</a></p> <p>3.<a href="http://www.javastack.cn/categories/工具/" rel="nofollow">Maven、Git、Eclipse、Intellij IDEA 系列工具教程</a></p> <p>4.<a href="http://www.javastack.cn/categories/面试题/" rel="nofollow">Java、后端、架构、阿里巴巴等大厂最新面试题</a></p> <p>觉得不错,别忘了点赞+转发哦!</p> <div class="alert alert-success" role="alert"><p>来源:<code>oschina</code></p><p>链接:<code>https://my.oschina.net/javaroad/blog/4311804</code></p></div></div> <div class="field field--name-field-tags field--type-entity-reference field--label-above"> <div class="field--label">标签</div> <div class="field--items"> <div class="field--item"><a href="/tag/java" hreflang="zh-hans">java</a></div> <div class="field--item"><a href="/tag/wechat" hreflang="zh-hans">wechat</a></div> <div class="field--item"><a href="/tag/json-lib" hreflang="zh-hans">JSON lib</a></div> <div class="field--item"><a href="/tag/spring" hreflang="zh-hans">Spring</a></div> <div class="field--item"><a href="/tag/jdk" hreflang="zh-hans">JDK</a></div> <div class="field--item"><a href="/tag/mianshi" hreflang="zh-hans">面试</a></div> <div class="field--item"><a href="/tag/benchmark" hreflang="zh-hans">Benchmark</a></div> </div> </div> Mon, 10 Aug 2020 13:07:43 +0000 白昼怎懂夜的黑 3737013 at https://www.e-learn.cn Json字符串与Object对象相互转换的几种方式 https://www.e-learn.cn/topic/3605970 <span>Json字符串与Object对象相互转换的几种方式</span> <span><span lang="" about="/user/182" typeof="schema:Person" property="schema:name" datatype="">南笙酒味</span></span> <span>2020-05-01 16:08:12</span> <div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"> <span id="OSC_h2_1"></span> <h2>Json-Lib、Org.Json、Jackson、Gson、FastJson五种方式转换json类型</h2> <p>只列举了最省事的方式。不涉及复制情况和速度。</p> <p>测试用例,一个User类,属性name,age,location。重写toString()。</p> <p>public class User {<br />    private String name;<br />    private Integer age;<br />    private String location;<br /> <br />    public User() {<br />    }<br />    public User(String name) {<br />        this.name = name;<br />    }<br />    public User(String name, Integer age) {<br />        this.name = name;<br />        this.age = age;<br />    }<br />    public User(String name, Integer age, String location) {<br />        this.name = name;<br />        this.age = age;<br />        this.location = location;<br />    }<br /> <br />    public String getName() {<br />        return name;<br />    }<br />    public void setName(String name) {<br />        this.name = name;<br />    }<br />    public Integer getAge() {<br />        return age;<br />    }<br />    public void setAge(Integer age) {<br />        this.age = age;<br />    }<br />    public String getLocation() {<br />        return location;<br />    }<br />    public void setLocation(String location) {<br />        this.location = location;<br />    }<br /> <br />    @Override<br />    public String toString() {<br />        return "User{" +<br />                "name='" + name + '\'' +<br />                ", age=" + age +<br />                ", location='" + location + '\'' +<br />                '}';<br />    }<br />}<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /></p> <p> </p> <p>1、Json-Lib<br />maven依赖如下,需注意&lt;classifier&gt;jdk15&lt;/classifier&gt;,jar包区分jdk1.3和jdk1.5版本<br /> <br />    &lt;dependency&gt;<br />      &lt;groupId&gt;net.sf.json-lib&lt;/groupId&gt;<br />      &lt;artifactId&gt;json-lib&lt;/artifactId&gt;<br />      &lt;version&gt;2.4&lt;/version&gt;<br />      &lt;classifier&gt;jdk15&lt;/classifier&gt;<br />    &lt;/dependency&gt;<br /> <br />测试demo<br /> <br />import net.sf.json.JSONObject;<br /> <br />public class JsonLibDemo {<br /> <br />    public static void main(String[] args) {<br />        //创建测试object<br />        User user = new User("李宁",24,"北京");<br />        System.out.println(user);<br /> <br />        //转成json字符串<br />        JSONObject jsonObject = JSONObject.fromObject(user);<br />        String json = jsonObject.toString();<br />        System.out.println(json);<br /> <br />        //json字符串转成对象<br />        JSONObject jsonObject1 = JSONObject.fromObject(json);<br />        User user1 = (User) JSONObject.toBean(jsonObject1,User.class);<br />        System.out.println(user1);<br />    }<br />}<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /></p> <p> </p> <p>2、org.json<br />maven依赖如下<br /> <br />    &lt;dependency&gt;<br />      &lt;groupId&gt;org.json&lt;/groupId&gt;<br />      &lt;artifactId&gt;json&lt;/artifactId&gt;<br />      &lt;version&gt;20170516&lt;/version&gt;<br />    &lt;/dependency&gt;<br /> <br />测试demo<br /> <br />import org.json.JSONObject;<br /> <br />public class OrgJsonDemo {<br />    public static void main(String[] args) {<br />        //创建测试object<br />        User user = new User("李宁",24,"北京");<br />        System.out.println(user);<br /> <br />        //转成json字符串<br />        String json = new JSONObject(user).toString();<br />        System.out.println(json);<br /> <br />        //json字符串转成对象<br />        JSONObject jsonObject = new JSONObject(json);<br />        String name = jsonObject.getString("name");<br />        Integer age = jsonObject.getInt("age");<br />        String location = jsonObject.getString("location");<br />        User user1 = new User(name,age,location);<br />        System.out.println(user1);<br />    }<br />}<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /></p> <p> </p> <p>3、Jackson<br />maven依赖<br /> <br />    &lt;dependency&gt;<br />      &lt;groupId&gt;com.fasterxml.jackson.core&lt;/groupId&gt;<br />      &lt;artifactId&gt;jackson-databind&lt;/artifactId&gt;<br />      &lt;version&gt;2.9.0&lt;/version&gt;<br />    &lt;/dependency&gt;<br /> <br />测试demo<br /> <br />import com.fasterxml.jackson.databind.ObjectMapper;<br /> <br />public class JacksonDemo {<br />    public static void main(String[] args) {<br />        //创建测试object<br />        User user = new User("李宁",24,"北京");<br />        System.out.println(user);<br /> <br />        //转成json字符串<br />        ObjectMapper mapper = new ObjectMapper();<br />        try {<br />            String json = mapper.writeValueAsString(user);<br />            System.out.println(json);<br /> <br /> <br />            //json字符串转成对象<br />            User user1 = mapper.readValue(json,User.class);<br />            System.out.println(user1);<br /> <br />        } catch (java.io.IOException e) {<br />            e.printStackTrace();<br />        }<br />    }<br />}<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /></p> <p> </p> <p>4、Gson<br />maven依赖<br /> <br />    &lt;dependency&gt;<br />      &lt;groupId&gt;com.google.code.gson&lt;/groupId&gt;<br />      &lt;artifactId&gt;gson&lt;/artifactId&gt;<br />      &lt;version&gt;2.8.1&lt;/version&gt;<br />    &lt;/dependency&gt;<br /> <br />测试demo<br /> <br />import com.google.gson.Gson;<br /> <br />public class GsonDemo {<br />    public static void main(String[] args) {<br />        //创建测试object<br />        User user = new User("李宁",24,"北京");<br />        System.out.println(user);<br /> <br />        //转成json字符串<br />        Gson gson = new Gson();<br />        String json = gson.toJson(user);<br />        System.out.println(json);<br /> <br />        //json字符串转成对象<br />        User user1 = gson.fromJson(json,User.class);<br />        System.out.println(user1);<br />    }<br />}<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /></p> <p> </p> <p>5、FastJson<br />maven依赖<br /> <br />    &lt;dependency&gt;<br />      &lt;groupId&gt;com.alibaba&lt;/groupId&gt;<br />      &lt;artifactId&gt;fastjson&lt;/artifactId&gt;<br />      &lt;version&gt;1.2.37&lt;/version&gt;<br />    &lt;/dependency&gt;<br /> <br />测试demo<br /> <br />import com.alibaba.fastjson.JSON;<br /> <br />public class FastJsonDemo {<br />    public static void main(String[] args) {<br />        //创建测试object<br />        User user = new User("李宁",24,"北京");<br />        System.out.println(user);<br /> <br />        //转成json字符串<br />        String json = JSON.toJSON(user).toString();<br />        System.out.println(json);<br /> <br />        //json字符串转成对象<br />        User user1 = JSON.parseObject(json,User.class);<br />        System.out.println(user1);<br /> <br />    }<br />}<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /></p> <p> </p> <p>json-lib时间有些久远,jar包只更新到2010年</p> <p>org.json用起来有些繁琐</p> <p>Jackson、Gson、FastJson只需一两句话就可以搞定</p> <div class="alert alert-success" role="alert"><p>来源:<code>oschina</code></p><p>链接:<code>https://my.oschina.net/u/4374048/blog/4260927</code></p></div></div> <div class="field field--name-field-tags field--type-entity-reference field--label-above"> <div class="field--label">标签</div> <div class="field--items"> <div class="field--item"><a href="/tag/gson" hreflang="zh-hans">gson</a></div> <div class="field--item"><a href="/tag/jackson" hreflang="zh-hans">jackson</a></div> <div class="field--item"><a href="/tag/fastjson" hreflang="zh-hans">fastjson</a></div> <div class="field--item"><a href="/tag/maven" hreflang="zh-hans">maven</a></div> <div class="field--item"><a href="/tag/json-lib" hreflang="zh-hans">JSON lib</a></div> <div class="field--item"><a href="/tag/jdk" hreflang="zh-hans">JDK</a></div> <div class="field--item"><a href="/tag/objectmapper" hreflang="zh-hans">ObjectMapper</a></div> </div> </div> Fri, 01 May 2020 08:08:12 +0000 南笙酒味 3605970 at https://www.e-learn.cn Json字符串与Object对象相互转换的几种方式 https://www.e-learn.cn/topic/3579458 <span>Json字符串与Object对象相互转换的几种方式</span> <span><span lang="" about="/user/218" typeof="schema:Person" property="schema:name" datatype="">一世执手</span></span> <span>2020-04-17 02:21:53</span> <div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"> <p class="ad-wrap"> <a data-traceid="blog_detail_above_text_link_1" data-tracepid="blog_detail_above_text_link" style="color:#A00; font-weight:bold;" href="https://www.oschina.net/action/visit/ad?id=1147" target="_blank" rel="nofollow">【推荐阅读】微服务还能火多久?&gt;&gt;&gt; <img align="absmiddle" style="max-height: 32px;max-width: 32px;margin-top: -4px;" class="b-lazy" data-src="https://www.oschina.net/img/hot3.png" data-original="https://www.oschina.net/img/hot3.png" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" /></a> </p> <p>Json-Lib、Org.Json、Jackson、Gson、FastJson五种方式转换json类型<br />只列举了最省事的方式。不涉及复制情况和速度。<br /></p> <p>测试用例,一个User类,属性name,age,location。重写toString()。</p> <p>public class User {<br /> private String name;<br /> private Integer age;<br /> private String location;<br /><br /><br /></p> <p> public User() {<br /> }<br /> public User(String name) {<br /> this.name = name;<br /> }<br /> public User(String name, Integer age) {<br /> this.name = name;<br /> this.age = age;<br /> }<br /> public User(String name, Integer age, String location) {<br /> this.name = name;<br /> this.age = age;<br /> this.location = location;<br /> }<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /></p> <p> public String getName() {<br /> return name;<br /> }<br /> public void setName(String name) {<br /> this.name = name;<br /> }<br /> public Integer getAge() {<br /> return age;<br /> }<br /> public void setAge(Integer age) {<br /> this.age = age;<br /> }<br /> public String getLocation() {<br /> return location;<br /> }<br /> public void setLocation(String location) {<br /> this.location = location;<br /> }<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /><br /></p> <p> @Override<br /> public String toString() {<br /> return "User{" +<br /> "name='" + name + '\'' +<br /> ", age=" + age +<br /> ", location='" + location + '\'' +<br /> '}';<br /> }<br />}<br />1、Json-Lib<br />maven依赖如下,需注意&lt;classifier&gt;jdk15&lt;/classifier&gt;,jar包区分jdk1.3和jdk1.5版本<br /><br /><br /><br /><br /><br /><br /><br /><br /><br /></p> <p> &lt;dependency&gt;<br /> &lt;groupId&gt;net.sf.json-lib&lt;/groupId&gt;<br /> &lt;artifactId&gt;json-lib&lt;/artifactId&gt;<br /> &lt;version&gt;2.4&lt;/version&gt;<br /> &lt;classifier&gt;jdk15&lt;/classifier&gt;<br /> &lt;/dependency&gt;<br /><br />测试demo<br /><br /><br /><br /><br /><br /><br /></p> <p>import net.sf.json.JSONObject;</p> <p>public class JsonLibDemo {</p> <p> public static void main(String[] args) {<br /> //创建测试object<br /> User user = new User("李宁",24,"北京");<br /> System.out.println(user);<br /><br /><br /></p> <p> //转成json字符串<br /> JSONObject jsonObject = JSONObject.fromObject(user);<br /> String json = jsonObject.toString();<br /> System.out.println(json);<br /><br /><br /></p> <p> //json字符串转成对象<br /> JSONObject jsonObject1 = JSONObject.fromObject(json);<br /> User user1 = (User) JSONObject.toBean(jsonObject1,User.class);<br /> System.out.println(user1);<br /> }<br />}<br /><br />2、org.json<br />maven依赖如下<br /><br /><br /><br /><br /><br /><br /><br /></p> <p> &lt;dependency&gt;<br /> &lt;groupId&gt;org.json&lt;/groupId&gt;<br /> &lt;artifactId&gt;json&lt;/artifactId&gt;<br /> &lt;version&gt;20170516&lt;/version&gt;<br /> &lt;/dependency&gt;<br /><br />测试demo<br /><br /><br /><br /><br /><br /></p> <p>import org.json.JSONObject;</p> <p>public class OrgJsonDemo {<br /> public static void main(String[] args) {<br /> //创建测试object<br /> User user = new User("李宁",24,"北京");<br /> System.out.println(user);<br /><br /><br /><br /></p> <p> //转成json字符串<br /> String json = new JSONObject(user).toString();<br /> System.out.println(json);<br /><br /></p> <p> //json字符串转成对象<br /> JSONObject jsonObject = new JSONObject(json);<br /> String name = jsonObject.getString("name");<br /> Integer age = jsonObject.getInt("age");<br /> String location = jsonObject.getString("location");<br /> User user1 = new User(name,age,location);<br /> System.out.println(user1);<br /> }<br />3、Jackson<br />maven依赖<br /><br /><br /><br /><br /><br /><br /><br /><br /></p> <p> &lt;dependency&gt;<br /> &lt;groupId&gt;com.fasterxml.jackson.core&lt;/groupId&gt;<br /> &lt;artifactId&gt;jackson-databind&lt;/artifactId&gt;<br /> &lt;version&gt;2.9.0&lt;/version&gt;<br /> &lt;/dependency&gt;<br /><br />测试demo<br /><br /><br /><br /><br /><br /></p> <p>import com.fasterxml.jackson.databind.ObjectMapper;</p> <p>public class JacksonDemo {<br /> public static void main(String[] args) {<br /> //创建测试object<br /> User user = new User("李宁",24,"北京");<br /> System.out.println(user);<br /><br /><br /><br /></p> <p> //转成json字符串<br /> ObjectMapper mapper = new ObjectMapper();<br /> try {<br /> String json = mapper.writeValueAsString(user);<br /> System.out.println(json);<br /><br /><br /><br /></p> <p><br /> //json字符串转成对象<br /> User user1 = mapper.readValue(json,User.class);<br /> System.out.println(user1);<br /><br /><br /></p> <p> } catch (java.io.IOException e) {<br /> e.printStackTrace();<br /> }<br /> }<br />}<br />4、Gson<br />maven依赖<br /><br /><br /><br /><br /><br /></p> <p> &lt;dependency&gt;<br /> &lt;groupId&gt;com.google.code.gson&lt;/groupId&gt;<br /> &lt;artifactId&gt;gson&lt;/artifactId&gt;<br /> &lt;version&gt;2.8.1&lt;/version&gt;<br /> &lt;/dependency&gt;<br /><br />测试demo<br /><br /><br /><br /><br /><br /></p> <p>import com.google.gson.Gson;</p> <p>public class GsonDemo {<br /> public static void main(String[] args) {<br /> //创建测试object<br /> User user = new User("李宁",24,"北京");<br /> System.out.println(user);<br /><br /><br /><br /></p> <p> //转成json字符串<br /> Gson gson = new Gson();<br /> String json = gson.toJson(user);<br /> System.out.println(json);<br /><br /><br /></p> <p> //json字符串转成对象<br /> User user1 = gson.fromJson(json,User.class);<br /> System.out.println(user1);<br /> }<br />}<br />5、FastJson<br />maven依赖<br /><br /><br /><br /><br /><br /></p> <p> &lt;dependency&gt;<br /> &lt;groupId&gt;com.alibaba&lt;/groupId&gt;<br /> &lt;artifactId&gt;fastjson&lt;/artifactId&gt;<br /> &lt;version&gt;1.2.37&lt;/version&gt;<br /> &lt;/dependency&gt;<br /><br />测试demo<br /><br /><br /><br /><br /><br /></p> <p>import com.alibaba.fastjson.JSON;</p> <p>public class FastJsonDemo {<br /> public static void main(String[] args) {<br /> //创建测试object<br /> User user = new User("李宁",24,"北京");<br /> System.out.println(user);<br /><br /><br /><br /></p> <p> //转成json字符串<br /> String json = JSON.toJSON(user).toString();<br /> System.out.println(json);<br /><br /></p> <p> //json字符串转成对象<br /> User user1 = JSON.parseObject(json,User.class);<br /> System.out.println(user1);<br /><br /></p> <p> }<br />}<br /><br />json-lib时间有些久远,jar包只更新到2010年<br /><br /><br /></p> <p>org.json用起来有些繁琐</p> <p>Jackson、Gson、FastJson只需一两句话就可以搞定<br /><br /><br /></p> <div class="alert alert-success" role="alert"><p>来源:<code>oschina</code></p><p>链接:<code>https://my.oschina.net/u/4263597/blog/3236858</code></p></div></div> <div class="field field--name-field-tags field--type-entity-reference field--label-above"> <div class="field--label">标签</div> <div class="field--items"> <div class="field--item"><a href="/tag/gson" hreflang="zh-hans">gson</a></div> <div class="field--item"><a href="/tag/jackson" hreflang="zh-hans">jackson</a></div> <div class="field--item"><a href="/tag/fastjson" hreflang="zh-hans">fastjson</a></div> <div class="field--item"><a href="/tag/maven" hreflang="zh-hans">maven</a></div> <div class="field--item"><a href="/tag/json-lib" hreflang="zh-hans">JSON lib</a></div> <div class="field--item"><a href="/tag/jdk" hreflang="zh-hans">JDK</a></div> <div class="field--item"><a href="/tag/objectmapper" hreflang="zh-hans">ObjectMapper</a></div> </div> </div> Thu, 16 Apr 2020 18:21:53 +0000 一世执手 3579458 at https://www.e-learn.cn Java递归算法构造JSON树形结构 https://www.e-learn.cn/topic/3558416 <span>Java递归算法构造JSON树形结构</span> <span><span lang="" about="/user/24" typeof="schema:Person" property="schema:name" datatype="">Deadly</span></span> <span>2020-04-09 09:49:30</span> <div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"> <span id="OSC_h1_1"></span> <h1>1.前言</h1> <p>最近项目中有一个需求,数据库中的菜单表是一个常见的id-pid结构,需要把它构建成树形的JSON格式发送给第三方,写出来之后感觉也是很简单的,核心代码只有5行,重要的是思路要明确,这里把源码分享给大家。</p> <p>工程里面使用了json-lib.jar这个包,作用是将List序列化成JSON。</p> <p><strong>2.</strong><strong>前言</strong></p> <pre><code class="language-java">package com.agileai.esb.smc.domain; import java.util.*; import net.sf.json.JSONArray; public class TreeBuilder { List&lt;TreeBuilder.Node&gt; nodes = new ArrayList&lt;TreeBuilder.Node&gt;(); public TreeBuilder(List&lt;Node&gt; nodes) { super(); this.nodes= nodes; } /** * 构建JSON树形结构 * @return */ public String buildJSONTree() { List&lt;Node&gt; nodeTree = buildTree(); JSONArray jsonArray = JSONArray.fromObject(nodeTree); return jsonArray.toString(); } /** * 构建树形结构 * @return */ public List&lt;Node&gt; buildTree() { List&lt;Node&gt;treeNodes = new ArrayList&lt;Node&gt;(); List&lt;Node&gt;rootNodes = getRootNodes(); for (Node rootNode : rootNodes) { buildChildNodes(rootNode); treeNodes.add(rootNode); } return treeNodes; } /** * 递归子节点 * @param node */ public void buildChildNodes(Node node) { List&lt;Node&gt; children = getChildNodes(node); if (!children.isEmpty()) { for(Node child : children) { buildChildNodes(child); } node.setMenus(children); } } /** * 获取父节点下所有的子节点 * @param nodes * @param pnode * @return */ public List&lt;Node&gt; getChildNodes(Node pnode) { List&lt;Node&gt;childNodes = new ArrayList&lt;Node&gt;(); for (Node n : nodes){ if (pnode.getId().equals(n.getPid())) { childNodes.add(n); } } return childNodes; } /** * 判断是否为根节点 * @param nodes * @param inNode * @return */ public boolean rootNode(Node node) { boolean isRootNode = true; for (Node n : nodes){ if (node.getPid().equals(n.getId())) { isRootNode= false; break; } } return isRootNode; } /** * 获取集合中所有的根节点 * @param nodes * @return */ public List&lt;Node&gt; getRootNodes() { List&lt;Node&gt;rootNodes = new ArrayList&lt;Node&gt;(); for (Node n : nodes){ if (rootNode(n)) { rootNodes.add(n); } } return rootNodes; } public static class Node { private String id; private String pid; private String text; private String url; private List&lt;Node&gt; menus; public Node() {} public Node(String id, String pid, String text, String url) { super(); this.id =id; this.pid =pid; this.text =text; this.url =url; } public String getId() { return id; } public void setId(String id) { this.id =id; } public String getPid() { return pid; } public void setPid(String pid) { this.pid =pid; } public String getText() { return text; } public void setText(String text) { this.text =text; } public String getUrl() { return url; } public void setUrl(String url) { this.url =url; } public List&lt;Node&gt; getMenus() { return menus; } public void setMenus(List&lt;Node&gt; menus) { this.menus= menus; } } public static void main(String[] args) { List&lt;Node&gt;nodes = new ArrayList&lt;Node&gt;(); Node p1 = new Node("01", "","01", ""); Node p6 = new Node("02", "","02", ""); Node p7 = new Node("0201", "02","0201", ""); Node p2 = new Node("0101", "01","0101", ""); Node p3 = new Node("0102", "01","0102", ""); Node p4 = new Node("010101", "0101","010101", ""); Node p5 = new Node("010102", "0101","010102", ""); Node p8 = new Node("03", "","03", ""); nodes.add(p1); nodes.add(p2); nodes.add(p3); nodes.add(p4); nodes.add(p5); nodes.add(p6); nodes.add(p7); nodes.add(p8); TreeBuilder treeBuilder = new TreeBuilder(nodes); System.out.println(treeBuilder.buildJSONTree()); } }</code></pre> <p> </p> <div class="alert alert-success" role="alert"><p>来源:<code>oschina</code></p><p>链接:<code>https://my.oschina.net/u/3734228/blog/1930215</code></p></div></div> <div class="field field--name-field-tags field--type-entity-reference field--label-above"> <div class="field--label">标签</div> <div class="field--items"> <div class="field--item"><a href="/tag/java" hreflang="zh-hans">java</a></div> <div class="field--item"><a href="/tag/json-lib" hreflang="zh-hans">JSON lib</a></div> </div> </div> Thu, 09 Apr 2020 01:49:30 +0000 Deadly 3558416 at https://www.e-learn.cn 【Java Web_13】Ajax、Json https://www.e-learn.cn/topic/3431479 <span>【Java Web_13】Ajax、Json</span> <span><span lang="" about="/user/10" typeof="schema:Person" property="schema:name" datatype="">橙三吉。</span></span> <span>2020-02-26 19:20:00</span> <div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"> <h2>一、Ajax</h2> <h4>1. $.ajax()</h4> <pre><code class="language-javascript">* 语法:$.ajax({键值对}); //使用$.ajax()发送异步请求 $.ajax({ url:"ajaxServlet1111" , // 请求路径 type:"POST" , //请求方式 //data: "username=jack&amp;age=23",//请求参数 data:{"username":"jack","age":23}, success:function (data) { alert(data); },//响应成功后的回调函数 error:function () { alert("出错啦...") },//表示如果请求响应出现错误,会执行的回调函数 dataType:"text"//设置接受到的响应数据的格式 }); </code></pre> <h4>2. $.get():发送get请求</h4> <pre><code>* 语法:$.get(url, [data], [callback], [type]) * 参数: * url:请求路径 * data:请求参数 * callback:回调函数 * type:响应结果的类型 </code></pre> <h4>3. $.post():发送post请求</h4> <pre><code>* 语法:$.post(url, [data], [callback], [type]) * 参数: * url:请求路径 * data:请求参数 * callback:回调函数 * type:响应结果的类型 </code></pre> <h2>二、json</h2> <h4>1. JSON数据和Java对象的相互转换</h4> <pre><code>① JSON解析器: * 常见的解析器:Jsonlib,Gson,fastjson,jackson ② JSON转为Java对象 * 导入jackson的相关jar包 * 创建Jackson核心对象 ObjectMapper * 调用ObjectMapper的相关方法进行转换 - readValue(json字符串数据,Class) ③ Java对象转换JSON * 导入jackson的相关jar包 * 创建Jackson核心对象 ObjectMapper * 调用ObjectMapper的相关方法进行转换 - writeValue(参数1,obj): 参数1: File:将obj对象转换为JSON字符串,并保存到指定的文件中 Writer:将obj对象转换为JSON字符串,并将json数据填充到字符输出流中 OutputStream:将obj对象转换为JSON字符串,并将json数据填充到字节输出流中 - writeValueAsString(obj):将对象转为json字符串 * 注解: - @JsonIgnore:排除属性。 - @JsonFormat:属性值得格式化 @JsonFormat(pattern = "yyyy-MM-dd") </code></pre> <h4>2. json获取数据</h4> <pre><code>① 单个数据 * json对象.键名 * json对象["键名"] ② 遍历 for(var key in json对象) { //获取单个 } </code></pre> <div class="alert alert-success" role="alert"><p>来源:<code>oschina</code></p><p>链接:<code>https://my.oschina.net/chinaSoftware/blog/3166227</code></p></div></div> <div class="field field--name-field-tags field--type-entity-reference field--label-above"> <div class="field--label">标签</div> <div class="field--items"> <div class="field--item"><a href="/tag/gson" hreflang="zh-hans">gson</a></div> <div class="field--item"><a href="/tag/objectmapper" hreflang="zh-hans">ObjectMapper</a></div> <div class="field--item"><a href="/tag/java" hreflang="zh-hans">java</a></div> <div class="field--item"><a href="/tag/jackson" hreflang="zh-hans">jackson</a></div> <div class="field--item"><a href="/tag/json-lib" hreflang="zh-hans">JSON lib</a></div> </div> </div> Wed, 26 Feb 2020 11:20:00 +0000 橙三吉。 3431479 at https://www.e-learn.cn SpringBoot引入第三方jar包或本地jar包的处理方式 https://www.e-learn.cn/topic/2692458 <span>SpringBoot引入第三方jar包或本地jar包的处理方式</span> <span><span lang="" about="/user/136" typeof="schema:Person" property="schema:name" datatype="">扶醉桌前</span></span> <span>2019-12-20 14:51:00</span> <div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"> <p class="ad-wrap"> <a data-traceid="blog_detail_above_text_link_1" data-tracepid="blog_detail_above_text_link" style="color:#A00; font-weight:bold;" href="https://my.oschina.net/u/2663968/blog/3135425" target="_blank" rel="nofollow">【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) &gt;&gt;&gt; <img align="absmiddle" style="max-height: 32px;max-width: 32px;margin-top: -4px;" class="b-lazy" data-src="https://www.oschina.net/img/hot3.png" data-original="https://www.oschina.net/img/hot3.png" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" /></a> </p> <p>在开发过程中有时会用到maven仓库里没有的jar包或者本地的jar包,这时没办法通过pom直接引入,那么该怎么解决呢</p> <p>一般有两种方法 <br /> - 第一种是将本地jar包安装在本地maven库 <br /> - 第二种是将本地jar包放入项目目录中</p> <p>这篇文章主要讲第二种方式,这又分两种情况,一种是打包jar包,第二种是打包war包</p> <ol><li> <span id="OSC_h1_1"></span><h1>jar包</h1> </li> </ol><p>先看看jar包的结构<img alt="" height="490" width="1164" class="b-lazy" data-src="https://oscimg.oschina.net/oscnet/99fdf5e9cea152a28a6c3326ec31059fea8.jpg" data-original="https://oscimg.oschina.net/oscnet/99fdf5e9cea152a28a6c3326ec31059fea8.jpg" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" /></p> <p>用压缩工具打开一个jar包 </p> <p><img alt="" height="590" width="1227" class="b-lazy" data-src="https://oscimg.oschina.net/oscnet/19eadd2dd2f0f4e244f68e985936d49e7dd.jpg" data-original="https://oscimg.oschina.net/oscnet/19eadd2dd2f0f4e244f68e985936d49e7dd.jpg" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" /></p> <p>打包后jar包的路径在BOOT-INF\lib目录下</p> <p>在项目目录中创建个文件夹用来存放jar包</p> <p><img alt="" height="306" width="409" class="b-lazy" data-src="https://oscimg.oschina.net/oscnet/7a73cb9b14a0f761cf391992004d0e3109b.jpg" data-original="https://oscimg.oschina.net/oscnet/7a73cb9b14a0f761cf391992004d0e3109b.jpg" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" /></p> <p>pom文件中加入如下内容</p> <pre><code class="language-xml"> &lt;dependency&gt; &lt;groupId&gt;com.ckfinder&lt;/groupId&gt; &lt;artifactId&gt;json-lib&lt;/artifactId&gt; &lt;version&gt;2.3&lt;/version&gt; &lt;scope&gt;system&lt;/scope&gt; &lt;systemPath&gt;${project.basedir}/src/main/resources/jar/json-lib-2.3-jdk15.jar&lt;/systemPath&gt; &lt;/dependency&gt; </code></pre> <p>groupId,artifactId,version可随便写 <br /> 这时候在项目中运行是没问题了,但是使用命令mvn clean package打包之后BOOT-INF\lib里面并没有json-lib-2.3-jdk15.jar包,还需要pom文件中做如下配置:</p> <pre><code class="language-xml"> &lt;plugin&gt; &lt;groupId&gt;org.springframework.boot&lt;/groupId&gt; &lt;artifactId&gt;spring-boot-maven-plugin&lt;/artifactId&gt; &lt;configuration&gt; &lt;includeSystemScope&gt;true&lt;/includeSystemScope&gt; &lt;/configuration&gt; &lt;/plugin&gt; </code></pre> <p>之后再使用mvn clean package打包就OK了</p> <p> </p> <ol><li> <span id="OSC_h1_2"></span><h1>war包</h1> </li> </ol><p>war包的目录如下: </p> <p><img alt="" height="123" width="737" class="b-lazy" data-src="https://oscimg.oschina.net/oscnet/516bf8ac17dd811d275393c3ec29dad8530.jpg" data-original="https://oscimg.oschina.net/oscnet/516bf8ac17dd811d275393c3ec29dad8530.jpg" src="data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" /></p> <p>war包在WEB-INF/lib目录下 <br /> 使用mvn clean package命令打包时需要在pom文件加入以下内容</p> <pre><code class="language-xml"> &lt;plugin&gt; &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt; &lt;artifactId&gt;maven-war-plugin&lt;/artifactId&gt; &lt;version&gt;2.4&lt;/version&gt; &lt;configuration&gt; &lt;webResources&gt; &lt;resource&gt; &lt;directory&gt;src/main/resources/jar/&lt;/directory&gt; &lt;targetPath&gt;WEB-INF/lib/&lt;/targetPath&gt; &lt;includes&gt; &lt;include&gt;**/*.jar&lt;/include&gt; &lt;/includes&gt; &lt;/resource&gt; &lt;/webResources&gt; &lt;/configuration&gt; &lt;/plugin&gt; </code></pre> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <p> </p> <div class="alert alert-success" role="alert"><p>来源:<code>oschina</code></p><p>链接:<code>https://my.oschina.net/u/854444/blog/3028353</code></p></div></div> <div class="field field--name-field-tags field--type-entity-reference field--label-above"> <div class="field--label">标签</div> <div class="field--items"> <div class="field--item"><a href="/tag/spring" hreflang="zh-hans">Spring</a></div> <div class="field--item"><a href="/tag/spring-boot" hreflang="zh-hans">Spring Boot</a></div> <div class="field--item"><a href="/tag/jdk" hreflang="zh-hans">JDK</a></div> <div class="field--item"><a href="/tag/json-lib" hreflang="zh-hans">JSON lib</a></div> </div> </div> Fri, 20 Dec 2019 06:51:00 +0000 扶醉桌前 2692458 at https://www.e-learn.cn java中常见的JSON操作 https://www.e-learn.cn/topic/1529497 <span>java中常见的JSON操作</span> <span><span lang="" about="/user/212" typeof="schema:Person" property="schema:name" datatype="">三世轮回</span></span> <span>2019-12-04 06:40:40</span> <div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"><div class="content" id="articleContent"> <h1>一、什么是Json</h1> <ul><li>Json是指JavaScript对象表示法(Java Script Object Notation)</li> <li>Json是轻量级的文本数据交换格式</li> <li>Json独立于语言和平台:Json解析器和Json库支持许多不同的编程语言</li> <li>Json具有自我描述性,更易理解</li> </ul><h1>二、Java中操作Json的几种方式</h1> <ul><li>FastJson 阿里巴巴开发的 JSON 库,性能十分优秀</li> </ul><pre><code>&lt;!-- https://mvnrepository.com/artifact/com.alibaba/fastjson --&gt; &lt;dependency&gt; &lt;groupId&gt;com.alibaba&lt;/groupId&gt; &lt;artifactId&gt;fastjson&lt;/artifactId&gt; &lt;version&gt;1.2.62&lt;/version&gt; &lt;/dependency&gt; </code></pre> <ul><li>Gson 谷歌开发的 JSON 库,功能十分全面</li> </ul><pre><code>&lt;!-- https://mvnrepository.com/artifact/com.google.code.gson/gson --&gt; &lt;dependency&gt; &lt;groupId&gt;com.google.code.gson&lt;/groupId&gt; &lt;artifactId&gt;gson&lt;/artifactId&gt; &lt;version&gt;2.8.6&lt;/version&gt; &lt;/dependency&gt; </code></pre> <ul><li>net.sf.json 最常见,使用较多</li> </ul><pre><code>&lt;!-- https://mvnrepository.com/artifact/net.sf.json-lib/json-lib --&gt; &lt;dependency&gt; &lt;groupId&gt;net.sf.json-lib&lt;/groupId&gt; &lt;artifactId&gt;json-lib&lt;/artifactId&gt; &lt;version&gt;2.4&lt;/version&gt; &lt;classifier&gt;jdk15&lt;/classifier&gt; &lt;/dependency&gt; </code></pre> <ul><li>Jackson 社区十分活跃且更新速度很快。</li> </ul><pre><code>&lt;!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core --&gt; &lt;dependency&gt; &lt;groupId&gt;com.fasterxml.jackson.core&lt;/groupId&gt; &lt;artifactId&gt;jackson-core&lt;/artifactId&gt; &lt;version&gt;2.10.0&lt;/version&gt; &lt;/dependency&gt; </code></pre> <h2>1、FastJson示例</h2> <pre><code>package com.powersi.test; import java.util.ArrayList; import java.util.List; import com.alibaba.fastjson.JSONArray; import com.alibaba.fastjson.JSONObject; public class FastJsonTest { /** * java对象转Json */ public static String object2Json(){ JSONObject json = new JSONObject(); Student stu = new Student(); stu.setId(001); stu.setName("张三"); stu.setAge(18); json = (JSONObject) JSONObject.toJSON(stu); return json.toString(); } /** * json转java对象 */ public static String json2Object(){ JSONObject json = new JSONObject(); json.put("id", "001"); json.put("name", "张三"); json.put("age", "18"); Student s = JSONObject.toJavaObject(json, Student.class); return s.toString(); } /** * json转字符串 */ public static String json2String(){ JSONObject json = new JSONObject(); json.put("id", "001"); json.put("name", "张三"); json.put("age", "18"); String s = JSONObject.toJSONString(json); return s; } /** * 字符串转json */ public static String string2Json(){ JSONObject json = new JSONObject(); String s = "{\"id\":\"001\", \"name\":\"张三\", \"age\":\"18\"}"; json = JSONObject.parseObject(s); return json.toString(); } /** * 集合转json数组 */ public static String list2JsonArray(){ Student stu = new Student(); stu.setId(001); stu.setName("张三"); stu.setAge(18); Student stu2 = new Student(); stu2.setId(002); stu2.setName("李四"); stu2.setAge(19); List&lt;Student&gt; stuList = new ArrayList&lt;Student&gt;(); stuList.add(stu); stuList.add(stu2); String s = JSONArray.toJSONString(stuList); return s; } public static void main(String[] args) { System.out.println(FastJsonTest.list2JsonArray()); } } </code></pre> <h2>2、Gson示例</h2> <pre><code>package com.powersi.test; import java.util.ArrayList; import java.util.List; import com.google.gson.Gson; public class GsonTest { /** * java对象转Json */ public static String object2Json(){ Gson gson = new Gson(); Student stu = new Student(); stu.setId(001); stu.setName("张三"); stu.setAge(18); String s = gson.toJson(stu); return s; } /** * json转java对象 */ public static String json2Object(){ Gson gson = new Gson(); String jsonStr = object2Json(); Student s = gson.fromJson(jsonStr, Student.class); return s.toString(); } /** * 对象转json数组 */ public static String list2JsonArray(){ Gson gson = new Gson(); Student stu = new Student(); stu.setId(001); stu.setName("张三"); stu.setAge(18); Student stu2 = new Student(); stu2.setId(002); stu2.setName("李四"); stu2.setAge(19); List&lt;Student&gt; stuList = new ArrayList&lt;Student&gt;(); stuList.add(stu); stuList.add(stu2); String s = gson.toJson(stuList); return s; } public static void main(String[] args) { System.out.println(GsonTest.list2JsonArray()); } } </code></pre> <h2>3、net.sf.json示例</h2> <pre><code>package com.powersi.test; import java.util.ArrayList; import java.util.List; import net.sf.json.JSONArray; import net.sf.json.JSONObject; public class NetSFJsonTest { /** * java对象转Json */ public static String object2Json(){ JSONObject json = new JSONObject(); Student stu = new Student(); stu.setId(001); stu.setName("张三"); stu.setAge(18); json = JSONObject.fromObject(stu); return json.toString(); } /** * json转java对象 */ public static String json2Object(){ String jsonStr = object2Json(); Student stu = (Student)JSONObject.toBean(JSONObject.fromObject(jsonStr), Student.class); return stu.toString(); } /** * 对象转json数组 */ public static String list2JsonArray(){ Student stu = new Student(); stu.setId(001); stu.setName("张三"); stu.setAge(18); Student stu2 = new Student(); stu2.setId(002); stu2.setName("李四"); stu2.setAge(19); List&lt;Student&gt; stuList = new ArrayList&lt;Student&gt;(); stuList.add(stu); stuList.add(stu2); JSONArray jsonArray = JSONArray.fromObject(stuList); return jsonArray.toString(); } public static void main(String[] args) { System.out.println(NetSFJsonTest.list2JsonArray()); } } </code></pre> </div><div class="alert alert-warning" role="alert"><p>来源:<code>https://my.oschina.net/zhang2xiang/blog/3128850</code></p></div></div> <div class="field field--name-field-tags field--type-entity-reference field--label-above"> <div class="field--label">标签</div> <div class="field--items"> <div class="field--item"><a href="/tag/gson" hreflang="zh-hans">gson</a></div> <div class="field--item"><a href="/tag/fastjson" hreflang="zh-hans">fastjson</a></div> <div class="field--item"><a href="/tag/java" hreflang="zh-hans">java</a></div> <div class="field--item"><a href="/tag/jackson" hreflang="zh-hans">jackson</a></div> <div class="field--item"><a href="/tag/json-lib" hreflang="zh-hans">JSON lib</a></div> </div> </div> Tue, 03 Dec 2019 22:40:40 +0000 三世轮回 1529497 at https://www.e-learn.cn 基于Kafka+SparkStreaming+HBase实时点击流案例 https://www.e-learn.cn/topic/327620 <span>基于Kafka+SparkStreaming+HBase实时点击流案例</span> <span><span lang="" about="/user/208" typeof="schema:Person" property="schema:name" datatype="">百般思念</span></span> <span>2019-11-27 13:54:48</span> <div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"> <span id="OSC_h3_1"></span> <h3>前言</h3> <p>最近在专注Spark开发,记录下自己的工作和学习路程,希望能跟大家互相交流成长<br /> 本文章更倾向于实战案例,涉及框架原理及基本应用还请读者自行阅读相关文章,相关在本文章最后参考资料中<br /> 关于Zookeeper/Kafka/HBase/Hadoop相关集群环境搭建作者会陆续更新<br /> 本文章发布后会及时更新文章中出现的错误及增加内容,欢迎大家订阅<br /> QQ:86608625 微信:guofei1990123</p> <span id="OSC_h3_2"></span> <h3>背景</h3> <p>Kafka实时记录从数据采集工具Flume或业务系统实时接口收集数据,并作为消息缓冲组件为上游实时计算框架提供可靠数据支撑,Spark 1.3版本后支持两种整合Kafka机制(Receiver-based Approach 和 Direct Approach),具体细节请参考文章最后官方文档链接,数据存储使用HBase</p> <span id="OSC_h3_3"></span> <h3>实现思路</h3> <ol><li>实现Kafka消息生产者模拟器</li> <li>Spark-Streaming采用Direct Approach方式实时获取Kafka中数据</li> <li>Spark-Streaming对数据进行业务计算后数据存储到HBase</li> </ol><span id="OSC_h3_4"></span> <h3>本地虚拟机集群环境配置</h3> <p>由于笔者机器性能有限,hadoop/zookeeper/kafka集群都搭建在一起主机名分别为hadoop1,hadoop2,hadoop3; hbase为单节点 在hadoop1</p> <span id="OSC_h3_5"></span> <h3>缺点及不足</h3> <p>由于笔者技术有限,代码设计上有部分缺陷,比如spark-streaming计算后数据保存hbase逻辑性能很低,希望大家多提意见以便小编及时更正</p> <span id="OSC_h3_6"></span> <h3>代码实现</h3> <p>Kafka消息模拟器</p> <pre><code>package clickstream import java.util.{Properties, Random, UUID} import kafka.producer.{KeyedMessage, Producer, ProducerConfig} import org.codehaus.jettison.json.JSONObject /** * Created by 郭飞 on 2016/5/31. */ object KafkaMessageGenerator { private val random = new Random() private var pointer = -1 private val os_type = Array( "Android", "IPhone OS", "None", "Windows Phone") def click() : Double = { random.nextInt(10) } def getOsType() : String = { pointer = pointer + 1 if(pointer &gt;= os_type.length) { pointer = 0 os_type(pointer) } else { os_type(pointer) } } def main(args: Array[String]): Unit = { val topic = "user_events" //本地虚拟机ZK地址 val brokers = "hadoop1:9092,hadoop2:9092,hadoop3:9092" val props = new Properties() props.put("metadata.broker.list", brokers) props.put("serializer.class", "kafka.serializer.StringEncoder") val kafkaConfig = new ProducerConfig(props) val producer = new Producer[String, String](kafkaConfig) while(true) { // prepare event data val event = new JSONObject() event .put("uid", UUID.randomUUID())//随机生成用户id .put("event_time", System.currentTimeMillis.toString) //记录时间发生时间 .put("os_type", getOsType) //设备类型 .put("click_count", click) //点击次数 // produce event message producer.send(new KeyedMessage[String, String](topic, event.toString)) println("Message sent: " + event) Thread.sleep(200) } } } </code></pre> <p>Spark-Streaming主类</p> <pre><code>package clickstream import kafka.serializer.StringDecoder import net.sf.json.JSONObject import org.apache.hadoop.hbase.client.{HTable, Put} import org.apache.hadoop.hbase.util.Bytes import org.apache.hadoop.hbase.{HBaseConfiguration, TableName} import org.apache.spark.SparkConf import org.apache.spark.streaming.kafka.KafkaUtils import org.apache.spark.streaming.{Seconds, StreamingContext} /** * Created by 郭飞 on 2016/5/31. */ object PageViewStream { def main(args: Array[String]): Unit = { var masterUrl = "local[2]" if (args.length &gt; 0) { masterUrl = args(0) } // Create a StreamingContext with the given master URL val conf = new SparkConf().setMaster(masterUrl).setAppName("PageViewStream") val ssc = new StreamingContext(conf, Seconds(5)) // Kafka configurations val topics = Set("PageViewStream") //本地虚拟机ZK地址 val brokers = "hadoop1:9092,hadoop2:9092,hadoop3:9092" val kafkaParams = Map[String, String]( "metadata.broker.list" -&gt; brokers, "serializer.class" -&gt; "kafka.serializer.StringEncoder") // Create a direct stream val kafkaStream = KafkaUtils.createDirectStream[String, String, StringDecoder, StringDecoder](ssc, kafkaParams, topics) val events = kafkaStream.flatMap(line =&gt; { val data = JSONObject.fromObject(line._2) Some(data) }) // Compute user click times val userClicks = events.map(x =&gt; (x.getString("uid"), x.getInt("click_count"))).reduceByKey(_ + _) userClicks.foreachRDD(rdd =&gt; { rdd.foreachPartition(partitionOfRecords =&gt; { partitionOfRecords.foreach(pair =&gt; { //Hbase配置 val tableName = "PageViewStream" val hbaseConf = HBaseConfiguration.create() hbaseConf.set("hbase.zookeeper.quorum", "hadoop1:9092") hbaseConf.set("hbase.zookeeper.property.clientPort", "2181") hbaseConf.set("hbase.defaults.for.version.skip", "true") //用户ID val uid = pair._1 //点击次数 val click = pair._2 //组装数据 val put = new Put(Bytes.toBytes(uid)) put.add("Stat".getBytes, "ClickStat".getBytes, Bytes.toBytes(click)) val StatTable = new HTable(hbaseConf, TableName.valueOf(tableName)) StatTable.setAutoFlush(false, false) //写入数据缓存 StatTable.setWriteBufferSize(3*1024*1024) StatTable.put(put) //提交 StatTable.flushCommits() }) }) }) ssc.start() ssc.awaitTermination() } } </code></pre> <span id="OSC_h4_7"></span> <h4>Maven POM文件</h4> <pre><code>&lt;project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"&gt; &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt; &lt;groupId&gt;com.guofei.spark&lt;/groupId&gt; &lt;artifactId&gt;RiskControl&lt;/artifactId&gt; &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt; &lt;packaging&gt;jar&lt;/packaging&gt; &lt;name&gt;RiskControl&lt;/name&gt; &lt;url&gt;http://maven.apache.org&lt;/url&gt; &lt;properties&gt; &lt;project.build.sourceEncoding&gt;UTF-8&lt;/project.build.sourceEncoding&gt; &lt;/properties&gt; &lt;dependencies&gt; &lt;!--Spark core 及 streaming --&gt; &lt;dependency&gt; &lt;groupId&gt;org.apache.spark&lt;/groupId&gt; &lt;artifactId&gt;spark-core_2.10&lt;/artifactId&gt; &lt;version&gt;1.3.0&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.apache.spark&lt;/groupId&gt; &lt;artifactId&gt;spark-streaming_2.10&lt;/artifactId&gt; &lt;version&gt;1.3.0&lt;/version&gt; &lt;/dependency&gt; &lt;!-- Spark整合Kafka--&gt; &lt;dependency&gt; &lt;groupId&gt;org.apache.spark&lt;/groupId&gt; &lt;artifactId&gt;spark-streaming-kafka_2.10&lt;/artifactId&gt; &lt;version&gt;1.3.0&lt;/version&gt; &lt;/dependency&gt; &lt;!-- 整合Hbase--&gt; &lt;dependency&gt; &lt;groupId&gt;org.apache.hbase&lt;/groupId&gt; &lt;artifactId&gt;hbase&lt;/artifactId&gt; &lt;version&gt;0.96.2-hadoop2&lt;/version&gt; &lt;type&gt;pom&lt;/type&gt; &lt;/dependency&gt; &lt;!--Hbase依赖 --&gt; &lt;dependency&gt; &lt;groupId&gt;org.apache.hbase&lt;/groupId&gt; &lt;artifactId&gt;hbase-server&lt;/artifactId&gt; &lt;version&gt;0.96.2-hadoop2&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.apache.hbase&lt;/groupId&gt; &lt;artifactId&gt;hbase-client&lt;/artifactId&gt; &lt;version&gt;0.96.2-hadoop2&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.apache.hbase&lt;/groupId&gt; &lt;artifactId&gt;hbase-common&lt;/artifactId&gt; &lt;version&gt;0.96.2-hadoop2&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;commons-io&lt;/groupId&gt; &lt;artifactId&gt;commons-io&lt;/artifactId&gt; &lt;version&gt;1.3.2&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;commons-logging&lt;/groupId&gt; &lt;artifactId&gt;commons-logging&lt;/artifactId&gt; &lt;version&gt;1.1.3&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;log4j&lt;/groupId&gt; &lt;artifactId&gt;log4j&lt;/artifactId&gt; &lt;version&gt;1.2.17&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;com.google.protobuf&lt;/groupId&gt; &lt;artifactId&gt;protobuf-java&lt;/artifactId&gt; &lt;version&gt;2.5.0&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;io.netty&lt;/groupId&gt; &lt;artifactId&gt;netty&lt;/artifactId&gt; &lt;version&gt;3.6.6.Final&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.apache.hbase&lt;/groupId&gt; &lt;artifactId&gt;hbase-protocol&lt;/artifactId&gt; &lt;version&gt;0.96.2-hadoop2&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.apache.zookeeper&lt;/groupId&gt; &lt;artifactId&gt;zookeeper&lt;/artifactId&gt; &lt;version&gt;3.4.5&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.cloudera.htrace&lt;/groupId&gt; &lt;artifactId&gt;htrace-core&lt;/artifactId&gt; &lt;version&gt;2.01&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.codehaus.jackson&lt;/groupId&gt; &lt;artifactId&gt;jackson-mapper-asl&lt;/artifactId&gt; &lt;version&gt;1.9.13&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.codehaus.jackson&lt;/groupId&gt; &lt;artifactId&gt;jackson-core-asl&lt;/artifactId&gt; &lt;version&gt;1.9.13&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.codehaus.jackson&lt;/groupId&gt; &lt;artifactId&gt;jackson-jaxrs&lt;/artifactId&gt; &lt;version&gt;1.9.13&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.codehaus.jackson&lt;/groupId&gt; &lt;artifactId&gt;jackson-xc&lt;/artifactId&gt; &lt;version&gt;1.9.13&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.slf4j&lt;/groupId&gt; &lt;artifactId&gt;slf4j-api&lt;/artifactId&gt; &lt;version&gt;1.6.4&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.slf4j&lt;/groupId&gt; &lt;artifactId&gt;slf4j-log4j12&lt;/artifactId&gt; &lt;version&gt;1.6.4&lt;/version&gt; &lt;/dependency&gt; &lt;!-- Hadoop依赖包--&gt; &lt;dependency&gt; &lt;groupId&gt;org.apache.hadoop&lt;/groupId&gt; &lt;artifactId&gt;hadoop-client&lt;/artifactId&gt; &lt;version&gt;2.6.4&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;commons-configuration&lt;/groupId&gt; &lt;artifactId&gt;commons-configuration&lt;/artifactId&gt; &lt;version&gt;1.6&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.apache.hadoop&lt;/groupId&gt; &lt;artifactId&gt;hadoop-auth&lt;/artifactId&gt; &lt;version&gt;2.6.4&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.apache.hadoop&lt;/groupId&gt; &lt;artifactId&gt;hadoop-common&lt;/artifactId&gt; &lt;version&gt;2.6.4&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;net.sf.json-lib&lt;/groupId&gt; &lt;artifactId&gt;json-lib&lt;/artifactId&gt; &lt;version&gt;2.4&lt;/version&gt; &lt;classifier&gt;jdk15&lt;/classifier&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.codehaus.jettison&lt;/groupId&gt; &lt;artifactId&gt;jettison&lt;/artifactId&gt; &lt;version&gt;1.1&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;redis.clients&lt;/groupId&gt; &lt;artifactId&gt;jedis&lt;/artifactId&gt; &lt;version&gt;2.5.2&lt;/version&gt; &lt;/dependency&gt; &lt;dependency&gt; &lt;groupId&gt;org.apache.commons&lt;/groupId&gt; &lt;artifactId&gt;commons-pool2&lt;/artifactId&gt; &lt;version&gt;2.2&lt;/version&gt; &lt;/dependency&gt; &lt;/dependencies&gt; &lt;build&gt; &lt;sourceDirectory&gt;src/main/scala&lt;/sourceDirectory&gt; &lt;testSourceDirectory&gt;src/test/scala&lt;/testSourceDirectory&gt; &lt;plugins&gt; &lt;plugin&gt; &lt;groupId&gt;net.alchim31.maven&lt;/groupId&gt; &lt;artifactId&gt;scala-maven-plugin&lt;/artifactId&gt; &lt;version&gt;3.2.2&lt;/version&gt; &lt;executions&gt; &lt;execution&gt; &lt;goals&gt; &lt;goal&gt;compile&lt;/goal&gt; &lt;goal&gt;testCompile&lt;/goal&gt; &lt;/goals&gt; &lt;configuration&gt; &lt;args&gt; &lt;arg&gt;-make:transitive&lt;/arg&gt; &lt;arg&gt;-dependencyfile&lt;/arg&gt; &lt;arg&gt;${project.build.directory}/.scala_dependencies&lt;/arg&gt; &lt;/args&gt; &lt;/configuration&gt; &lt;/execution&gt; &lt;/executions&gt; &lt;/plugin&gt; &lt;plugin&gt; &lt;groupId&gt;org.apache.maven.plugins&lt;/groupId&gt; &lt;artifactId&gt;maven-shade-plugin&lt;/artifactId&gt; &lt;version&gt;2.4.3&lt;/version&gt; &lt;executions&gt; &lt;execution&gt; &lt;phase&gt;package&lt;/phase&gt; &lt;goals&gt; &lt;goal&gt;shade&lt;/goal&gt; &lt;/goals&gt; &lt;configuration&gt; &lt;filters&gt; &lt;filter&gt; &lt;artifact&gt;*:*&lt;/artifact&gt; &lt;excludes&gt; &lt;exclude&gt;META-INF/*.SF&lt;/exclude&gt; &lt;exclude&gt;META-INF/*.DSA&lt;/exclude&gt; &lt;exclude&gt;META-INF/*.RSA&lt;/exclude&gt; &lt;/excludes&gt; &lt;/filter&gt; &lt;/filters&gt; &lt;/configuration&gt; &lt;/execution&gt; &lt;/executions&gt; &lt;/plugin&gt; &lt;/plugins&gt; &lt;/build&gt; &lt;/project&gt; </code></pre> <span id="OSC_h4_8"></span> <h4>FAQ</h4> <ol><li>Maven导入json-lib报错<br /> Failure to find net.sf.json-lib:json-lib:jar:2.3 in<br /><a href="https://link.jianshu.com?t=http://repo.maven.apache.org/maven2" target="_blank" rel="nofollow">http://repo.maven.apache.org/maven2</a> was cached in the local<br /> repository<br /> 解决:<br /><a href="https://link.jianshu.com?t=http://stackoverflow.com/questions/4173214/maven-missing-net-sf-json-lib" target="_blank" rel="nofollow">http://stackoverflow.com/questions/4173214/maven-missing-net-sf-json-lib</a><br /> &lt;dependency&gt;<br /> &lt;groupId&gt;net.sf.json-lib&lt;/groupId&gt;<br /> &lt;artifactId&gt;json-lib&lt;/artifactId&gt;<br /> &lt;version&gt;2.4&lt;/version&gt;<br /> &lt;classifier&gt;jdk15&lt;/classifier&gt;<br /> &lt;/dependency&gt;</li> <li>执行Spark-Streaming程序报错<br /> org.apache.spark.SparkException: Task not serializable</li> </ol><pre><code>userClicks.foreachRDD(rdd =&gt; { rdd.foreachPartition(partitionOfRecords =&gt; { partitionOfRecords.foreach( 这里面的代码中所包含的对象必须是序列化的 这里面的代码中所包含的对象必须是序列化的 这里面的代码中所包含的对象必须是序列化的 }) }) }) </code></pre> <ol><li>执行Maven打包报错,找不到依赖的jar包<br /> error:not found: object kafka<br /> ERROR import kafka.javaapi.producer.Producer<br /> 解决:win10本地系统 用户/郭飞/.m2/ 目录含有中文</li> </ol><span id="OSC_h3_9"></span> <h3>参考文档</h3> <ul><li>spark-streaming官方文档<br /><a href="https://link.jianshu.com?t=http://spark.apache.org/docs/latest/streaming-programming-guide.html" target="_blank" rel="nofollow">http://spark.apache.org/docs/latest/streaming-programming-guide.html</a></li> <li>spark-streaming整合kafka官方文档<br /><a href="https://link.jianshu.com?t=http://spark.apache.org/docs/latest/streaming-kafka-integration.html" target="_blank" rel="nofollow">http://spark.apache.org/docs/latest/streaming-kafka-integration.html</a></li> <li>spark-streaming整合flume官方文档<br /><a href="https://link.jianshu.com?t=http://spark.apache.org/docs/latest/streaming-flume-integration.html" target="_blank" rel="nofollow">http://spark.apache.org/docs/latest/streaming-flume-integration.html</a></li> <li>spark-streaming整合自定义数据源官方文档<br /><a href="https://link.jianshu.com?t=http://spark.apache.org/docs/latest/streaming-custom-receivers.html" target="_blank" rel="nofollow">http://spark.apache.org/docs/latest/streaming-custom-receivers.html</a></li> <li>spark-streaming官方scala案例<br /><a href="https://link.jianshu.com?t=https://github.com/apache/spark/tree/master/examples/src/main/scala/org/apache/spark/examples/streaming" target="_blank" rel="nofollow">https://github.com/apache/spark/tree/master/examples/src/main/scala/org/apache/spark/examples/streaming</a></li> <li>简单之美博客<br /><a href="https://link.jianshu.com?t=http://shiyanjun.cn/archives/1097.html" target="_blank" rel="nofollow">http://shiyanjun.cn/archives/1097.html</a></li> </ul><p><br /><br /> 作者:MichaelFly<br /> 链接:https://www.jianshu.com/p/ccba410462ba<br /> 來源:简书<br /> 简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。</p> <div class="alert alert-success" role="alert"><p>来源:<code>oschina</code></p><p>链接:<code>https://my.oschina.net/u/3346994/blog/1847171</code></p></div></div> <div class="field field--name-field-tags field--type-entity-reference field--label-above"> <div class="field--label">标签</div> <div class="field--items"> <div class="field--item"><a href="/tag/apache-hbase" hreflang="zh-hans">Apache HBase</a></div> <div class="field--item"><a href="/tag/apache-spark" hreflang="zh-hans">Apache Spark</a></div> <div class="field--item"><a href="/tag/hadoop" hreflang="zh-hans">Hadoop</a></div> <div class="field--item"><a href="/tag/kafka" hreflang="zh-hans">Kafka</a></div> <div class="field--item"><a href="/tag/json-lib" hreflang="zh-hans">JSON lib</a></div> </div> </div> Wed, 27 Nov 2019 05:54:48 +0000 百般思念 327620 at https://www.e-learn.cn Google Gson的使用方法及JSON 技术对比 https://www.e-learn.cn/topic/257439 <span> Google Gson的使用方法及JSON 技术对比</span> <span><span lang="" about="/user/108" typeof="schema:Person" property="schema:name" datatype="">青春壹個敷衍的年華</span></span> <span>2019-11-27 06:10:49</span> <div class="field field--name-body field--type-text-with-summary field--label-hidden field--item"> <span id="OSC_h2_1"></span> <h2>  一 、各个JSON技术的简介和优劣<br />  </h2> <span id="OSC_h3_2"></span> <h3><strong>1.json-lib</strong></h3> <p>json-lib最开始的也是应用最广泛的json解析工具,json-lib 不好的地方确实是依赖于很多第三方包,<br /> 包括commons-beanutils.jar,commons-collections-3.2.jar,commons-lang-2.6.jar,commons-logging-1.1.1.jar,ezmorph-1.0.6.jar,对于复杂类型的转换,json-lib对于json转换成bean还有缺陷,比如一个类里面会出现另一个类的list或者map集合,json-lib从json到bean的转换就会出现问题。json-lib在功能和性能上面都不能满足现在互联网化的需求。</p> <span id="OSC_h3_3"></span> <h3><strong>2.开源的Jackson</strong></h3> <p>相比json-lib框架,Jackson所依赖的jar包较少,简单易用并且性能也要相对高些。而且Jackson社区相对比较活跃,更新速度也比较快。Jackson对于复杂类型的json转换bean会出现问题,一些集合Map,List的转换出现问题。Jackson对于复杂类型的bean转换Json,转换的json格式不是标准的Json格式</p> <span id="OSC_h3_4"></span> <h3>3.Google的Gson</h3> <p>Gson是目前功能最全的Json解析神器,Gson当初是为因应Google公司内部需求而由Google自行研发而来,<br /> 但自从在2008年五月公开发布第一版后已被许多公司或用户应用。Gson的应用主要为toJson与fromJson两个转换函数,无依赖,不需要例外额外的jar,能够直接跑在JDK上。而在使用这种对象转换之前需先创建好对象的类型以及其成员才能成功的将JSON字符串成功转换成相对应的对象。类里面只要有get和set方法,Gson完全可以将复杂类型的json到bean或bean到json的转换,是JSON解析的神器。Gson在功能上面无可挑剔,但是性能上面比FastJson有所差距。</p> <span id="OSC_h3_5"></span> <h3>4.阿里巴巴的FastJson</h3> <p>Fastjson是一个Java语言编写的高性能的JSON处理器,由阿里巴巴公司开发。无依赖,不需要例外额外的jar,能够直接跑在JDK上。FastJson在复杂类型的Bean转换Json上会出现一些问题,可能会出现引用的类型,导致Json转换出错,需要制定引用。FastJson采用独创的算法,将parse的速度提升到极致,超过所有json库。<br /><br /><em><strong>综上4种Json技术的比较</strong>,在项目选型的时候可以使用Google的Gson和阿里巴巴的FastJson两种并行使用,如果只是功能要求,没有性能要求,可以使用google的Gson,如果有性能上面的要求可以使用Gson将bean转换json确保数据的正确,使用FastJson将Json转换Bean </em></p> <span id="OSC_h2_6"></span> <h2> </h2> <span id="OSC_h2_7"></span> <h2>二、Google的Gson包的使用简介。</h2> <p><strong>Gson类:解析json的最基础的工具类<br /> JsonParser类:解析器来解析JSON到JsonElements的解析树<br /> JsonElement类:一个类代表的JSON元素<br /> JsonObject类:JSON对象类型<br /> JsonArray类:JsonObject数组<br /> TypeToken类:用于创建type,比如泛型List&lt;?&gt; </strong></p> <p><strong>maven 依赖:</strong></p> <pre><code class="language-xml">&lt;dependency&gt; &lt;groupId&gt;com.google.code.gson&lt;/groupId&gt; &lt;artifactId&gt;gson&lt;/artifactId&gt; &lt;version&gt;2.7&lt;/version&gt; &lt;/dependency&gt;</code></pre> <p>三、Gson的使用</p> <p>首先定义一个类:</p> <pre><code class="language-java">package com.test; import java.util.Date; public class User { private Integer id; private int age; private String userName; private Date birthday; public Integer getId() { return id; } public void setId(Integer id) { this.id = id; } public int getAge() { return age; } public void setAge(int age) { this.age = age; } public String getUserName() { return userName; } public void setUserName(String userName) { this.userName = userName; } public Date getBirthday() { return birthday; } public void setBirthday(Date birthday) { this.birthday = birthday; } public User(Integer id, int age, String userName, Date birthday) { super(); this.id = id; this.age = age; this.userName = userName; this.birthday = birthday; } public User() { super(); } } </code></pre> <p>测试实例:</p> <pre><code class="language-java">package com.test; import java.util.Date; import java.util.List; import java.util.Set; import org.junit.Test; import com.google.gson.Gson; import com.google.gson.GsonBuilder; import com.google.gson.JsonElement; import com.google.gson.JsonObject; import com.google.gson.JsonParser; import com.google.gson.reflect.TypeToken; public class GsonTest { @Test public void test1() throws Exception { Gson gson = new Gson(); User user = new User(1, 20, "AA", new Date()); System.out.println("Bean-&gt;转换为JSON字符串:"); String jsonStr = gson.toJson(user); System.out.println(jsonStr); System.out.println(); } @Test public void test2() throws Exception { Gson gson = new Gson(); String jsonStr = "{\"id\":1,\"age\":20,\"userName\":\"AA\",\"birthday\":\"Nov 14, 2016 4:52:38 PM\"}"; System.out.println("字符串-&gt;转换成Bean对象"); User user = gson.fromJson(jsonStr, User.class); System.out.println(user); System.out.println(); } @Test public void test3() throws Exception { Gson gson = new Gson(); System.out.println("json转换复杂的bean,比如List,Set,Map:"); String json = "[{\"id\":\"1\",\"name\":\"Json技术\"},{\"id\":\"2\",\"name\":\"java技术\"}]"; List list = gson.fromJson(json, new TypeToken&lt;List&gt;() { }.getType()); Set set = gson.fromJson(json, new TypeToken&lt;Set&gt;() { }.getType()); System.out.println(); } @Test public void test4() throws Exception { Gson gson = new Gson(); String json = "[{\"id\":\"1\",\"name\":\"Json技术\"},{\"id\":\"2\",\"name\":\"java技术\"}]"; System.out.println("格式化JSON:"); gson = new GsonBuilder().setPrettyPrinting().create(); JsonParser jp = new JsonParser(); JsonElement je = jp.parse(json); json = gson.toJson(je); System.out.println(json); System.out.println(); } @Test public void test5() throws Exception { System.out.println("判断字符串是否是json,通过捕捉的异常来判断是否是json"); String json = "[{\"id\":\"1\",\"name\":\"Json技术\"},{\"id\":\"2\",\"name\":\"java技术\"}]"; boolean jsonFlag; try { new JsonParser().parse(json).getAsJsonObject(); jsonFlag = true; } catch (Exception e) { jsonFlag = false; } System.out.println(jsonFlag + ":" + jsonFlag); System.out.println(); } @Test public void test6() throws Exception { System.out.println("从json串中获取属性"); String json = "{\"id\":\"1\",\"name\":\"Json技术\"}"; String propertyName = "name"; String propertyValue = ""; try { JsonParser jsonParser = new JsonParser(); JsonElement element = jsonParser.parse(json); JsonObject jsonObj = element.getAsJsonObject(); propertyValue = jsonObj.get(propertyName).toString(); System.out.println("propertyValue:" + propertyValue); } catch (Exception e) { propertyValue = null; } System.out.println(); } @Test public void test7() throws Exception { System.out.println("除去json中的某个属性"); String json = "{\"id\":\"1\",\"name\":\"Json技术\"}"; String propertyName = "id"; JsonParser jsonParser = new JsonParser(); JsonElement element = jsonParser.parse(json); JsonObject jsonObj = element.getAsJsonObject(); jsonObj.remove(propertyName); json = jsonObj.toString(); System.out.println("json:" + json); System.out.println(); } @Test public void test8() throws Exception { System.out.println("向json中添加属性"); String json = "{\"id\":\"1\",\"name\":\"Json技术\"}"; String propertyName = "desc"; Object propertyValue = "json各种技术的调研"; JsonParser jsonParser = new JsonParser(); JsonElement element = jsonParser.parse(json); JsonObject jsonObj = element.getAsJsonObject(); jsonObj.addProperty(propertyName, new Gson().toJson(propertyValue)); json = jsonObj.toString(); System.out.println("json:" + json); System.out.println(); } @Test public void test9() throws Exception { System.out.println("修改json中的属性"); String json = "{\"id\":\"1\",\"name\":\"Json技术\"}"; String propertyName = "name"; Object propertyValue = "json各种技术的调研"; JsonParser jsonParser = new JsonParser(); JsonElement element = jsonParser.parse(json); JsonObject jsonObj = element.getAsJsonObject(); jsonObj.remove(propertyName); jsonObj.addProperty(propertyName, new Gson().toJson(propertyValue)); json = jsonObj.toString(); System.out.println("json:" + json); System.out.println(); } @Test public void test10() throws Exception { System.out.println("判断json中是否有属性"); String json = "{\"id\":\"1\",\"name\":\"Json技术\"}"; String propertyName = "name"; boolean isContains = false; JsonParser jsonParser = new JsonParser(); JsonElement element = jsonParser.parse(json); JsonObject jsonObj = element.getAsJsonObject(); isContains = jsonObj.has(propertyName); System.out.println("isContains:" + isContains); System.out.println(); } @Test public void test11() throws Exception { System.out.println("json中日期格式的处理"); GsonBuilder builder = new GsonBuilder(); builder.setDateFormat("yyyy-MM-dd"); Gson gson = builder.create(); User user = new User(); user.setBirthday(new Date()); String json = gson.toJson(user); System.out.println("json:" + json); System.out.println(); } @Test public void test12() throws Exception { System.out.println("json中对于Html的转义"); GsonBuilder builder = new GsonBuilder(); builder.disableHtmlEscaping(); Gson gson = builder.create(); System.out.println(); } } </code></pre> <p>运行如下:</p> <pre><code>判断json中是否有属性 isContains:true json中日期格式的处理 json:{"age":0,"birthday":"2016-11-14"} json中对于Html的转义 Bean-&gt;转换为JSON字符串: {"id":1,"age":20,"userName":"AA","birthday":"Nov 14, 2016 5:14:19 PM"} 字符串-&gt;转换成Bean对象 User [id=1, age=20, userName=AA, birthday=Mon Nov 14 16:52:38 CST 2016] json转换复杂的bean,比如List,Set,Map: 格式化JSON: [ { "id": "1", "name": "Json技术" }, { "id": "2", "name": "java技术" } ] 判断字符串是否是json,通过捕捉的异常来判断是否是json false:false 从json串中获取属性 propertyValue:"Json技术" 除去json中的某个属性 json:{"name":"Json技术"} 向json中添加属性 json:{"id":"1","name":"Json技术","desc":"\"json各种技术的调研\""} 修改json中的属性 json:{"id":"1","name":"\"json各种技术的调研\""}</code></pre> <p>更多关于GSON的使用方法,请参考【这里面介绍的很详细】:<a href="http://www.jianshu.com/p/e740196225a4" rel="nofollow">http://www.jianshu.com/p/e740196225a4</a></p> <div class="alert alert-success" role="alert"><p>来源:<code>oschina</code></p><p>链接:<code>https://my.oschina.net/u/2811721/blog/787565</code></p></div></div> <div class="field field--name-field-tags field--type-entity-reference field--label-above"> <div class="field--label">标签</div> <div class="field--items"> <div class="field--item"><a href="/tag/gson" hreflang="zh-hans">gson</a></div> <div class="field--item"><a href="/tag/json" hreflang="zh-hans">json</a></div> <div class="field--item"><a href="/tag/json-parser" hreflang="zh-hans">JSON Parser</a></div> <div class="field--item"><a href="/tag/java" hreflang="zh-hans">java</a></div> <div class="field--item"><a href="/tag/json-lib" hreflang="zh-hans">JSON lib</a></div> </div> </div> Tue, 26 Nov 2019 22:10:49 +0000 青春壹個敷衍的年華 257439 at https://www.e-learn.cn