日常生活で一般的な 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 ライブラリです。この例がお役に立てば幸いです。