JsonObject と JsonArray の使用法を組み合わせて説明する [歴史上の複雑な JSON 文字列の例を説明する]

日常生活で一般的な JSON 文字列処理、この記事では複雑な JSON 文字列を使用して、JsonObject と JsonArray の使用法を整理して説明します。

以下のような複雑な JSON データがあります。

詳細な説明を読む前に、json ビューで次の json 文字列構造を解析してよく見ることをお勧めします。これにより、理解が容易になり、半分の労力で 2 倍の結果が得られます。

{
    "_index": "t_spider_gat_log_20230622",
    "_type": "_doc",
    "_id": "YyUp4ogBrZfsTXIOIzYJ",
    "_version": 1,
    "_score": null,
    "_source": {
        "msg": "success",
        "code": 0,
        "responseTime": "2023-06-22T08:12:06.791Z",
        "channel": "",
        "responseJSON": "{\"code\":0,\"createTime\":\"\",\"itineraries\":[{\"prices\":[{\"bookingCode\":\"T\",\"currency\":\"NOK\",\"fareFamilyType\":\"LowFare\",\"paxType\":\"ADT\",\"price\":2110.0,\"seatCount\":9,\"tax\":482.0},{\"bookingCode\":\"T\",\"currency\":\"NOK\",\"fareFamilyType\":\"LowFare+\",\"paxType\":\"ADT\",\"price\":2560.0,\"seatCount\":9,\"tax\":482.0},{\"bookingCode\":\"A\",\"currency\":\"NOK\",\"fareFamilyType\":\"Flex\",\"paxType\":\"ADT\",\"price\":5160.0,\"seatCount\":9,\"tax\":482.0}],\"segments\":[{\"airline\":\"DY\",\"arrAirport\":\"BGO\",\"arrTerminal\":\"\",\"arrTime\":\"202310011245\",\"codeShare\":false,\"direction\":1,\"dptAirport\":\"LGW\",\"dptTerminal\":\"\",\"dptTime\":\"202310010950\",\"duration\":115,\"equipment\":\"73H\",\"flightNo\":\"DY1317\",\"go\":true,\"operatingAirline\":\"\",\"operatingFlightNo\":\"\",\"return\":false,\"stopCities\":\"\"},{\"airline\":\"DY\",\"arrAirport\":\"BGY\",\"arrTerminal\":\"\",\"arrTime\":\"202310012035\",\"codeShare\":false,\"direction\":1,\"dptAirport\":\"BGO\",\"dptTerminal\":\"\",\"dptTime\":\"202310011805\",\"duration\":150,\"equipment\":\"73H\",\"flightNo\":\"DY1848\",\"go\":true,\"operatingAirline\":\"\",\"operatingFlightNo\":\"\",\"return\":false,\"stopCities\":\"\"}]}],\"msg\":\"success\"}",
        "source": "SER",
        "reqId": "GAT_SER_f6ebd7b8771647f393fcdc4e0fd77ced",
        "vendorCode": "ADY",
        "requestJSON": "{\"application\":\"API\",\"channel\":\"\",\"condition\":{\"adtCount\":2,\"arrAirports\":[\"BGY\",\"LIN\",\"MXP\",\"PMF\"],\"arrCity\":\"MIL\",\"chdCount\":0,\"dptAirports\":[\"LCY\",\"LGW\",\"LHR\",\"LTN\",\"SEN\",\"STN\"],\"dptCity\":\"LON\",\"dptDate\":\"2023-10-01\",\"infCount\":0,\"rtnDate\":\"\",\"singleTrip\":true,\"tripType\":1},\"realTime\":false,\"region\":\"SG\",\"requestId\":\"GAT_SER_f6ebd7b8771647f393fcdc4e0fd77ced\",\"requestTime\":1687421526160,\"scriptDirectory\":\"ady\",\"source\":\"SER\",\"useProxy\":true,\"vendorCode\":\"ADY\"}",
        "requestTime": "2023-06-22T08:12:06.160Z",
        "proxy": null,
        "requestTimeEnd": null,
        "application": "API",
        "subOrderNumber": null,
        "action": "GAT",
        "requestTimeStart": null,
        "airline": null,
        "region": "SG",
        "status": "COMPLETE"
    },
    "fields": {
        "requestTime": [
            "2023-06-22T08:12:06.160Z"
        ],
        "responseTime": [
            "2023-06-22T08:12:06.791Z"
        ]
    },
    "highlight": {
        "responseJSON": [
            "{\"code\":0,\"createTime\":\"\",\"itineraries\":[{\"prices\":[{\"bookingCode\":\"T\",\"currency\":\"NOK\",\"fareFamilyType\":\"LowFare\",\"paxType\":\"ADT\",\"@kibana-highlighted-field@price@/kibana-highlighted-field@\":2110.0,\"seatCount\":9,\"tax\":482.0},{\"bookingCode\":\"T\",\"currency\":\"NOK\",\"fareFamilyType\":\"LowFare+\",\"paxType\":\"ADT\",\"@kibana-highlighted-field@price@/kibana-highlighted-field@\":2560.0,\"seatCount\":9,\"tax\":482.0},{\"bookingCode\":\"A\",\"currency\":\"NOK\",\"fareFamilyType\":\"Flex\",\"paxType\":\"ADT\",\"@kibana-highlighted-field@price@/kibana-highlighted-field@\":5160.0,\"seatCount\":9,\"tax\":482.0}],\"segments\":[{\"airline\":\"DY\",\"arrAirport\":\"BGO\",\"arrTerminal\":\"\",\"arrTime\":\"202310011245\",\"codeShare\":false,\"direction\":1,\"dptAirport\":\"LGW\",\"dptTerminal\":\"\",\"dptTime\":\"202310010950\",\"duration\":115,\"equipment\":\"73H\",\"flightNo\":\"DY1317\",\"go\":true,\"operatingAirline\":\"\",\"operatingFlightNo\":\"\",\"return\":false,\"stopCities\":\"\"},{\"airline\":\"DY\",\"arrAirport\":\"BGY\",\"arrTerminal\":\"\",\"arrTime\":\"202310012035\",\"codeShare\":false,\"direction\":1,\"dptAirport\":\"BGO\",\"dptTerminal\":\"\",\"dptTime\":\"202310011805\",\"duration\":150,\"equipment\":\"73H\",\"flightNo\":\"DY1848\",\"go\":true,\"operatingAirline\":\"\",\"operatingFlightNo\":\"\",\"return\":false,\"stopCities\":\"\"}]}],\"msg\":\"success\"}"
        ]
    },
    "sort": [
        1687421526160
    ]
}

この JSON データを解析するには、まず JSONObject に変換し、次に必要に応じてネストされた JSONObject または JSONArray を取得します。

JSONオブジェクトに変換する

import org.json.JSONObject;
import org.json.JSONArray;

// 假设 jsonString 是您提供的 JSON 字符串

// 将字符串转化为 JSONObject
JSONObject jsonObj = new JSONObject(jsonString);

解析ソース

皆さんをよりよく理解するために、最も複雑なフィールド分析のソースを取得して説明します。

// 获取 _source 的 JSONObject
JSONObject source = jsonObj.getJSONObject("_source");

// 获取 _source 中的各种值
String msg = source.getString("msg");
int code = source.getInt("code");
String responseTime = source.getString("responseTime");
String channel = source.getString("channel");

応答JSONを解析する

// 获取 _source 中的 responseJSON 并转化为另一个 JSONObject
String responseJSONString = source.getString("responseJSON");
JSONObject responseJSON = new JSONObject(responseJSONString);

解析 itineraries

// 从 responseJSON 中获取 itineraries,它是一个 JSONArray
JSONArray itineraries = responseJSON.getJSONArray("itineraries");

// 遍历每一个 itinerary
for (int i = 0; i < itineraries.length(); i++) {
    
    
    // 获取每一个 itinerary,它是一个 JSONObject
    JSONObject itinerary = itineraries.getJSONObject(i);

価格の解析

// 从 itinerary 中获取 prices,它是一个 JSONArray
JSONArray prices = itinerary.getJSONArray("prices");

// 遍历每一个 price
for (int j = 0; j < prices.length(); j++) {
    
    
    // 获取每一个 price,它是一个 JSONObject
    JSONObject price = prices.getJSONObject(j);

    // 从 price 中获取各种值
    String bookingCode = price.getString("bookingCode");
    String currency = price.getString("currency");
    String fareFamilyType = price.getString("fareFamilyType");
    String paxType = price.getString("paxType");
    double priceValue = price.getDouble("price");
    int seatCount = price.getInt("seatCount");
    double tax = price.getDouble("tax");
}

注: このコードは、考えられる例外を処理しません。実際には、JSONException などの考えられる例外を処理するために、これらの呼び出しをラップする必要がある場合があります。

セグメントの解析

各旅程にはセグメントの JSONArray もあり、この配列を解析することもできます。

// 从 itinerary 中获取 segments,它是一个 JSONArray
JSONArray segments = itinerary.getJSONArray("segments");

// 遍历每一个 segment
for (int k = 0; k < segments.length(); k++) {
    
    
    // 获取每一个 segment,它是一个 JSONObject
    JSONObject segment = segments.getJSONObject(k);

    // 从 segment 中获取各种值
    String airline = segment.getString("airline");
    String arrAirport = segment.getString("arrAirport");
    String arrTerminal = segment.getString("arrTerminal");
    String arrTime = segment.getString("arrTime");
    boolean codeShare = segment.getBoolean("codeShare");
    int direction = segment.getInt("direction");
    String dptAirport = segment.getString("dptAirport");
    String dptTerminal = segment.getString("dptTerminal");
    String dptTime = segment.getString("dptTime");
    int duration = segment.getInt("duration");
    String equipment = segment.getString("equipment");
    String flightNo = segment.getString("flightNo");
    boolean go = segment.getBoolean("go");
    String operatingAirline = segment.getString("operatingAirline");
    String operatingFlightNo = segment.getString("operatingFlightNo");
    boolean returnFlag = segment.getBoolean("return");
    String stopCities = segment.getString("stopCities");
}

上記のコードでは、セグメント配列を取得し、各セグメントを走査して、そこからさまざまな値を取得しました。このプロセスは、prices 配列の代わりにsegments 配列が関係することを除いて、前のプロセスと似ています。

要約:

これが複雑な JSON データを解析する方法です。org.json ライブラリを使用していることに注意してください。これは、JSON を操作するために非常に強力で一般的に使用される Java ライブラリです。この例がお役に立てば幸いです。

おすすめ

転載: blog.csdn.net/m0_49303490/article/details/131342500