ネストされたJSONを解析するJava文字列

1. com.alibaba.fastjson

ジャーパッケージアドレスします。https://www.mvnjar.com/com.alibaba/fastjson/jar.html

多層分析

Javaは、次の2つの文字列はJSONを解決します

パッケージjansonD​​emo; 

インポートcom.alibaba.fastjson.JSON;
 インポートcom.alibaba.fastjson.JSONArray;
 インポートcom.alibaba.fastjson.JSONObject; 

パブリック クラスTestJSON {
     / ** 
     * JSON、実際にキーと値のペア( "鍵": 「値」)
     *キーは文字列でなければなりません、値が有効なJSONデータ型(文字列、数値、オブジェクト、配列、ブール値、またはnull)であってもよい
     jsonobj.getString(「キー」)を持つ文字列値の場合*、取得
     *番号の値は、jsonobj.getIntValue(「キー」)、jsonobj.getFloatValue使用方法 (「キー」)、jsonobj.getInteger(「キー」) とのGetパッケージなどの基本データ型
     ブール場合*値をjsonobj.getBoolean(「キー」)を持つ値、jsonobj.getBooleanValue (「キー」) の取得
     *値、それが配列の場合、jsonobj.getJSONArray(「キー」と)取得
     対象オブジェクトがjsonobj.get(「キー」)を得ることである場合、*値
     オブジェクトはJSONObject *値である場合、jsonobj.getJSONObject(「キー」)によって取得された
     * / 

    / ** 
     *このメソッドは、既存のJSON JSONオブジェクトに文字列を変換し、対応するキー値に対応するオブジェクトを除去するために使用されます値は
     * JSON.parseObject(jsonStr)メソッドと、文字列既存のjsonobjectに変換
     *限りJSONは{} jSONObjectを表し、[] JSONArrayを表すようである
     *はjSONObject jSONObject jsonobject.getJSONObject(「キーとオブジェクトを取得")メソッドは
     * JSONArray JSONObject jsonobject.getJSONArray持つオブジェクトを取得します("キー")メソッド
     * / 

    プライベート 静的 無効strWritedToJSONObject(){
         // 次のネストされたJSONオブジェクトは、子オブジェクトをJSONである 
        " {\ n個の文字列myJsonObj =" + 
                "\"名\ ":\" runoob \ "N- \" + 
                "\" ALEXA \ ":10000、N- \"+ 
                "\"サイト\ ":{\ n"は+
                "\"サイト1 \ ":\" www.runoob.com \ "N- \" + 
                "\"サイト2 \ ":\" m.runoob.com \ "N- \" + 
                "\" site3 \「:\ "c.runoob.com \" \ nを- "+ 
                "} \ n -で" + 
                "}" ; 
        jSONObject jsonobj = JSON.parseObject(myJsonObj); // JSON jsonObjectオブジェクトに文字列を変換
        / ** *取得した各jSONObject **各メソッドの少ないを使用したい、実際のシーンのどのタイプに応じた際、値に対応するキー値* / 
        System.out.printlnは(jsonobj.get(「名前」)); // 値に対応する削除名前得られた値は、オブジェクトである 
        のSystem.out.println(jsonobj.getString(「名前」))。// 名前の値に対応する値を削除し、文字列が得られ
        System.out.println(jsonobj.getIntValue( "ALEXA")); // 取得した値に対応する除去名前値がintで 
        のSystem.out.println(jsonobj.get( "サイト")); // 部位を除去値に対応する値オブジェクト取得 
        するSystem.out.println(jsonobj.getString(「サイト」)); 
        のSystem.out.println(jsonobj.getJSONObject( ;「サイト」))// 部位を撮影した値に対応する値子オブジェクトJSONObject与える 
        のSystem.out.println(。jsonobj.getJSONObjectを( "サイト")はgetString( "SITE2")); // 値SITE2に対応するJSONObjectネストされた子オブジェクトの値を削除し、必要getJSONObject()最初JSONObjectを取得


        / ** 
         *以下は、JSONオブジェクトは、順番に配列がサブオブジェクトとJSONサブ配列を含む配列を含んでいる
         * / 
        ストリングmyJsonObj2 =「{\ N-」+
                "\"名\ "\"网站\ "\ n" + 
                "\" NUM \ ":3、\ n" + 
                "\"サイト\ ":\ n" + 
                "{\"名\ ": \ "Googleの\"、\ "情報\":[\ "アンドロイド\"、\ "グーグル搜索\"、\ "グーグル翻译\"]}、\ nは」+ 
                "{\"名\ ":Runoob" \ \ "\ "情報\"[\ "菜鸟教程\"、\ "菜鸟工具\"、\ "菜鸟微信\"]}、\ n" + 
                "{\"名\ ":\"淘宝\」 、\ "情報\" [\ "淘宝\"、\ "网购\"]} \ n」+ 
                "] \ n" + 
                "}" 
        Jsonobj2 JSONObject = JSON.parseObject(myJsonObj2); // jsonObjectは、オブジェクトをJSONに文字列を変換 
        するSystem.out.println(jsonobj2.get( "サイト" )); 
        System.out.printlnは(jsonobj2.getString(サイトの値に対応する値を削除し、オブジェクトがJSONOArray得る
         // するSystem.out.println(jsonobj2.getJSONObject(「サイト」 ));このメソッドを使用することができない、標的部位はJSONOArrayあるため
         // サイトに配列JSON子オブジェクトの最初の値に対応するJSONオブジェクトを削除 
        するSystem.out.println(jsonobj2.getJSONArray(「サイト」 )getJSONObject(0 )); // 結果を得る:{ "名": "グーグル "、 "情報":[ "アンドロイド"、 "Googleの検索"、 "Google翻訳"]} 
        のSystem.out.println(jsonobj2.getJSONArray( "サイト" )に.get(0 )); 
        のSystem.out.println(jsonobj2.getJSONArray( "サイト")のgetString(0 ))。
        // 最初のサブアレイJSON下にネストされた子オブジェクトの配列に対応する値に対応するJSONオブジェクト情報サイトを削除
        System.out.println(Jsonobj2.getJSONArray( "サイト")getJSONObject(0).getJSONArray( "情報")); // 結果を得る:[ "アンドロイド"を、 "Google検索"、 "Googleが翻訳"]
         // サブアレイが第2の値に対応するネストされた最初のサブオブジェクトJSON情報次の対応する配列でJSONオブジェクト抽出部位 
        のSystem.out.println(jsonobj2.getJSONArray(「サイト」) 。getJSONObject(0).getJSONArray( " 情報")のgetString(1));.。// 取得結果:Google検索

        // 順次JSONオブジェクトは、サイトの配列に対応する値取り 
        JSONArray jsonobj2.getJSONArray =配列("サイト" ); 
        getJsonArrayItem(配列); 
        // 順JSON配列次のネストされた子オブジェクトの第二のサブアレイに対応した値に対応するJSONオブジェクト情報サイト除去 
        JSONArray ARR = jsonobj2.getJSONArray(「サイト」 )。getJSONObject(1).getJSONArray( "情報」 ); 
        getJsonArrayItem(ARR)。
     } 

    / ** 
     *手动添加对象到一个JSONObject 
     * / 
    プライベート 静的 ボイドwriteStrToJSONObject(){ 
        JSONObject jsonObject = 新しいJSONObject()。
        jsonObject.put( "名前"、 "トム" ); 
        jsonObject.put( "年齢"、20 ); 

        JSONArray jsonArray = 新しいJSONArray(); 
        JSONObject jsonArrayObject1 = 新しいJSONObject(); 
        jsonArrayObject1.put( "名前"、 "アリババ" )。
        jsonArrayObject1.put( "情報"、 "www.alibaba.com" );
        JSONObject jsonArrayObject2 = 新しいJSONObject(); 
        jsonArrayObject2.put( "名前"、 "百度" )。
        jsonArrayObject2.put( "情報"、 "www.baidu.com" ); 

        jsonArray.add(jsonArrayObject1)。
        jsonArray.add(jsonArrayObject2)。

        jsonObject.put( "サイト" 、jsonArray)。

        System.out.println(jsonObject)。
     } 

    / ** 
     *将字符串转为JSONArray 
     * / 
    プライベート 静的 ボイドstrToJsonArray(){ 
        文字列arrayStr = "[\ n" + 
                "{\ n" + 
                "\"名\ ":\"アリババの\ "\ nは" + 
                "\"情報\ ":\" WWW。 alibaba.com \ "\ n" + 
                "}、\ n" + 
                "{\ nを"
                "\"情報\:www.baidu.com \ "\ n" + "\" 
                "} \ n" + 
                "]" 

        JSONArray配列 = JSON.parseArray(arrayStr)。
        System.out.println(アレイ)
     } 

    / ** 
     *依次取出JSONArray中的值
     * / 
    プライベート 静的 ボイドgetJsonArrayItem(JSONArrayアレイ){
         ためのint i = 0; 私はarray.size <(); 私は++ ){ 
            System.out.printlnは(array.get(I))。
        } 
    } 

     // 测试类
    パブリック 静的 ボイドメイン(文字列[]引数){
        strWritedToJSONObject(); 
        // writeStrToJSONObject();
        // strToJsonArray(); 
    } 

}

要約:{} getJSONArrayとgetJSONObject []を使用する場合

{}、JSONArrayをループで使用するため

 文字列s = "[{\" 成功\ ":trueの場合、\" データ\ ":[{\" building_id \ ":\" *** \」、\ "building_num \":\ "** \"、\ "ROOM_NAME \":\ "** \"、\ "door_name \":\ "** \"、\ "電気\":\ "** \"}]}]」。

 JSONArray JA = jsonx.getJSONArray( "データ")。
        {(; iが(ja.sizeを<)私は++ iが0 = INT)のための
            JSONObjectチョ= ja.getJSONObject(I)。
            ストリングbuilding_id = jo.getString( "building_id")。
        }

3.JsonObjectは、文字列が、JSONのキー値が含まれているかどうかを決定します

パブリック 静的 ボイドメイン(文字列[]引数)がスローJSONException { 

  文字列jsonStr [ ''、 ''、 ''、 '']、 'ベースライン':=「{ 'コンテンツ' { 'コンテンツ':「1' [ '2']、 'BaselineName': 'JC'、 'BaselineId': '813xxx'}} " ; 

  JSONObject jsonObject = 新しい新しいJSONObject(jsonStr); 

  // 呼び出しは、キー値が存在するかどうかを決定するために、本明細書JSONObject方法を有し、もしtrueにプレゼンスを返す

  IF(jsonObject .has(「ベースライン」)){ 

    // ここで後の存在の現在の値に対応するキー操作

    jSONObject jsonObject2 =(jSONObject)jsonObject.get(「ベースライン」); 

    ... 

    ... ...

  } 

}

どのように4.fastjson裁判官JSONObjectとJSONArray

 / ** 
     *单层的orgJson判断是否是JSONObject还是JSONArray。
     * / 
    パブリック 静的 ボイドsimpleJSONObjectOrgJson(){ 
        文字列メッセージ = "[{\ R \ n" + "\"データソース\ "\" 'P33' \ "\ R \ n" 
                + "\" DataStamp \ "\ " '2018年8月25日' \"、\ R \ n "+ "\" GovScCode \ "\" 'AAA' \"、\ R \ n」
                + "\" OperEffDate \ "\" '2018- 05-02' \ "\ R \ n" + "\" OrgCode \ "\" 'WW' \ "\ R \ n" 
                + "\" OrgDesc \ "\" 'SS' \」、\ Rする\ n "+ "\" ORGID \ ":" 1 \" \
                + "\" OrgType \ "\" 'SS' \ "\ R \ n" + "\" ParentOrgId \ "\" 0 \ "\ R \ n"は
                "\" + "\" RegAddress \ 'WW' \ "\ R \ n" + "\" RegDate \ ":\" \ "\ R \ n" + "\" RegionId \ ":\" 1 \ "\ R \ n" 
                + "} ]」; 
        オブジェクトJSON = 新しいJSONTokener(メッセージ).nextValue();
        もし(JSON のinstanceof JSONObject){ 
            JSONObject jsonObject = (JSONObject)JSON。
            System.out.println(jsonObject)。
             
            JSONArray JSONArray = (JSONArray)JSON; 
            のSystem.out.println(JSONArray); 
            // 解析が自己であることができます
        } 
    }

 これらは、兄のおかげで共有するために、プロジェクトによって発生する問題です。

https://www.cnblogs.com/janson071/p/9646678.html

https://blog.csdn.net/kxj19980524/article/details/83718971

https://www.cnblogs.com/1012hq/p/11141932.html

https://www.cnblogs.com/biehongli/p/9721846.html

おすすめ

転載: www.cnblogs.com/SI0301/p/11277109.html