JSON-lib複雑jsonフォーマット変換

7320 ワード

JSON-lib複雑jsonフォーマット変換
  • 需要分析:文字列を解析し、jsonフォーマットに解析します.jsonフォーマットの概要は以下の通りです.完全なjsonフォーマットは、解析が必要な完全なjsonフォーマット
  • を参照してください.
    getData({
    			"data": {
    				"_112727": {
    					"id": "112727",
    					"num": "  093",
    					"date": "2018-10-28",
    					"time": "10:00:00",
    					"b_date": "2018-10-27",
    					"status": "Selling",
    					"hot": "0",
    					"l_id": "102",
    					"l_cn": "       ",
    					"h_id": "1645",
    					"h_cn": "   ",
    					"a_id": "861",
    					"a_cn": "     ",
    					"index_show": "0",
    					"show": "1",
    					"hhad": {
    						"a": "4.75",
    						"d": "3.60",
    						"h": "1.56",
    						"goalline": "",
    						"p_code": "HHAD",
    						"o_type": "F",
    						"p_id": "505424",
    						"p_status": "Selling",
    						"single": "0",
    						"allup": "0",
    						"fixedodds": "+1",
    						"cbt": "2",
    						"int": "2",
    						"vbt": "2",
    						"h_trend": "0",
    						"a_trend": "0",
    						"d_trend": "0",
    						"l_trend": "0"
    					},
    					"had": {
    						"a": "2.14",
    						"d": "2.95",
    						"h": "3.10",
    						"goalline": "",
    						"p_code": "HAD",
    						"o_type": "F",
    						"p_id": "505423",
    						"p_status": "Selling",
    						"single": "0",
    						"allup": "0",
    						"fixedodds": "",
    						"cbt": "2",
    						"int": "2",
    						"vbt": "2",
    						"h_trend": "0",
    						"a_trend": "0",
    						"d_trend": "0",
    						"l_trend": "0"
    					},
    					"l_cn_abbr": "  ",
    					"h_cn_abbr": "   ",
    					"a_cn_abbr": "   ",
    					"h_order": "[  3]",
    					"a_order": "[  2]",
    					"h_id_dc": "1461",
    					"a_id_dc": "1458",
    					"l_background_color": "339900",
    					"weather": "    ",
    					"weather_city": "",
    					"temperature": "13°",
    					"weather_pic": "http:\/\/static.sporttery.cn\/www\/images\/weather_logo\/cloudy.png",
    					"match_info": []
    				}
    			})
    

    これは厳密ではないjsonフォーマットの文字列で、私はdataの中のすべての情報を取り出す必要があります.最後にデータベースに保存します.この時、stringを採用して文字列を切り取って、彼を完全なjsonフォーマットの文字列にしました.
     //         
       String str = EntityUtils.toString(entity);
    //       ,   int   ,     .length          。
       str = str.substring(str.indexOf("(") + 1, str.indexOf(")"));
    

    切り取った文字列、すなわち完全なjson形式の文字列が得られ、ここではjson-libを用いて文字列を解析し、以下は解析のステップである.1.Json-libに必要なjarパッケージ
  • commons-beanutils-1.8.3.jar
  • commons-collections-3.2.1.jar
  • commons-lang-2.6.jar
  • commons-logging-1.1.1.jar
  • ezmorph-1.0.6.jar
  • json-lib-2.4-jdk15.jar

  • 2.データ構造を分析し、適切な方法で解析します.私たちはjsonツールパッケージを使用してjsonフォーマットのデータを解析します.よく使われているのは主に2種類あります.1つは変換集合で、1つは変換対象で、2つの方法にはそれぞれ適用される具体的な状況といくつかの適用されないところがあります.しかし、彼らにも相互変換のところがあります.相対的に、私はJSONObjectのほうが好きです.私から見れば集合も対象だからです.
                        //       json  
                        JSONObject jsonObject = JSONObject.fromObject(str);
    
                        //     json  
                        JSONObject jsonOb = jsonObject.getJSONObject("data");
    					//         key
                        Iterator it = jsonOb.keys();
                        //            key   ,         
                        while (it.hasNext()) {
                            //      key
                            String key = it.next();
                            //           ,  
                            JSONObject ob = jsonOb.getJSONObject(key);
                            Integer id = ob.getInt("id");
                            String num = ob.getString("num");
                            String date = ob.getString("date");
                            String time = ob.getString("time");
                            String l_cn_abbr = ob.getString("l_cn_abbr");
                            String h_cn_abbr = ob.getString("h_cn_abbr");
                            String a_cn_abbr = ob.getString("a_cn_abbr");
                            //           
                            BiSai bisai = new BiSai(id, num, date, time, l_cn_abbr, h_cn_abbr, a_cn_abbr);
    
                            //         
                            JSONObject hhad = ob.getJSONObject("hhad");
                            String a = hhad.getString("a");
                            String d = hhad.getString("d");
                            String h = hhad.getString("h");
                            String fixedodds = hhad.getString("fixedodds");
                            //          ,  
                            XinXi xinxi = new XinXi(id, a, d, h, fixedodds);
    						
    						//         
                            JSONObject had = ob.getJSONObject("had");
                            if (!had.isNullObject()) {
                                a = had.getString("a");
                                d = had.getString("d");
                                h = had.getString("h");
                                fixedodds = had.getString("fixedodds");
                                
                                //          ,  
                                XinXi xinxi2 = new XinXi(id, a, d, h, fixedodds);
    
                                //  service      
                                jingCaiService.setJingCai(bisai, xinxi, xinxi2);
                            }
                        }
    
    

    ここではまず彼をjsonオブジェクトとして解析し、その中で私に役立つjsonオブジェクトを取得します.この時、私はそれをArrayに変換したいと思っていましたが、arrayに変換すると、Arrayの各要素がhashmapの形で存在するので、もちろん、このときmapの各キーは絶えず変化し(毎回キャプチャするのは自動的にデータをキャプチャする)、しかもよく解析できないので、私はそれをJsonObjectに変換して、それからその中のすべてのキーを取得して、それから反復器を利用してそれを遍歴して、欲しい実体クラスに対応するデータを得ます.あとでカプセル化すればいい!
    3.出会った问题と解决策はデータパッケージの过程の中で、ずっと1つの间违いを报告して、“null object”、前にネット上で各大牛のいくつかの総括を探したことがあって、すべてその方法がなくて、后でこのデータに対して分析を行って、発见して、间违った地方で、対象が少なくなったので、このデータは登って取り出したので、人のウェブサイトのデータはデータベースにアップロードしてページに表示されますが、人がアップロードする過程で様々な原因で、あるデータが存在しない、つまりオブジェクトのサブオブジェクトが存在しない可能性があります.この時、このような間違いを報告しました.この相手はいない!原因を見つけた後、いろいろな非空判定方法を試みたが、効果がなかった.最後にこの異常を発見した時、json-libの異常、つまりその対象の異常、(カスタム異常クラス)後にjsonObjectのソースコードを見て、この異常が発生した場所を見つけて、publicの非空判定メカニズムがあることを発見した.この時に使えば完璧に問題を解決できます.以下はJSOnObjectにおけるこの異常発生に関するいくつかの方法である.
    	//       
    	private boolean nullObject;
    	
    	//  jsonObject   ,      
    	public boolean isNullObject() {
            return this.nullObject;
        }
        
    	//        
    	private void verifyIsNull() {
            if (this.isNullObject()) {
                throw new JSONException("null object");
            }
        }
    

    複雑なjson文字列を解析したと言える.問題を解決して、積極的に考えて、妖怪は結局葫芦ワに勝てない.