Theory
Data Text की तरह आता है
जब आपकी app एक events API call करती है, response JSON text होता है, एक string जैसे [{"name":"Robotics","seats":50}]। आपकी app एक raw string को usefully नहीं दिखा सकती; इसे JSON parse करना पड़ता है, values निकालनी पड़ती हैं, तो यह 'Robotics, 50 seats' display कर सके।
JSON parse करना किसी भी API consume करने के लिए एक core skill है। आपने पहले JSON की shape देखी; यह lesson दिखाता है Android में इसे JSONObject और JSONArray इस्तेमाल करके कैसे पढ़ें। एक बार आप एक JSON response को Kotlin values में बदल सकें, आप किसी भी web service से data इस्तेमाल कर सकते हैं।
Practical
एक Events API से एक JSON Response
{
"events": [
{ "name": "Robotics Workshop", "seats": 50 },
{ "name": "Coding Contest", "seats": 30 }
]
}
// An object { } with a key 'events' whose value is an array [ ] of objects.
// Your app must read 'name' and 'seats' out of each item.This example runs in Gri-Learn on the web, where you can edit it and see the output.
Theory
JSONObject और JSONArray के साथ Parsing
Android की built-in org.json classes JSON text parse करती हैं।
JSONObject(text) एक JSON object parse करता है; आप typed getters से fields पढ़ते हैं: getString("name"), getInt("seats")। JSONArray एक JSON list represent करता है; length() इसका size देता है और getJSONObject(i) index i पर item देता है।
तो events response पढ़ने के लिए: text से एक JSONObject बनाइए, events JSONArray निकालिए, फिर इसे loop कीजिए, हर item से name और seats अपने Kotlin objects में निकालते हुए। यही पूरा pattern है, container parse कीजिए, फिर loop और extract कीजिए, और यह किसी भी JSON shape के लिए काम करता है एक बार आप structure जान लें।
Practical
Android में Events JSON Parse करना
val root = JSONObject(responseText) // parse the object
val eventsArray = root.getJSONArray("events") // the JSON array
val events = mutableListOf<Pair<String, Int>>()
for (i in 0 until eventsArray.length()) { // loop the items
val item = eventsArray.getJSONObject(i)
val name = item.getString("name")
val seats = item.getInt("seats")
events.add(name to seats)
}
// events now holds [("Robotics Workshop", 50), ("Coding Contest", 30)]Formula
Getter को Structure से Match कीजिए
Correctly parse करने का मतलब है अपने code को JSON की structure और types से match करना। Nested objects और arrays में उतरने के लिए getJSONObject/getJSONArray इस्तेमाल कीजिए, और leaf values के लिए typed getters (getString, getInt, getBoolean), हर key के actual type से match करते हुए।
Shape गलत लीजिए, एक array को object की तरह treat कीजिए, या एक number को string की तरह पढ़िए, और parsing fail हो जाती है। तो हमेशा पहले JSON की structure जानिए (API की documentation से या एक sample response से)। बड़ी apps के लिए, Gson या Moshi जैसी libraries JSON को directly Kotlin data classes में automatically map कर सकती हैं, manual parsing बचाते हुए, पर पहले manual तरीका समझना उन libraries को समझ में लाता है।
Quiz
API { "events": [ ... ] } return करती है। Android में, आप loop करने के लिए events की list कैसे पाते हैं?
- root.getString("events"), क्योंकि सब कुछ एक string है
- root.getJSONArray("events"), फिर 0 से इसकी length() तक loop कीजिए, हर item के लिए getJSONObject(i) इस्तेमाल करते हुए
- root.getInt("events"), क्योंकि list का एक size है
- आप Android में arrays नहीं पढ़ सकते
Show the answer
root.getJSONArray("events"), फिर 0 से इसकी length() तक loop कीजिए, हर item के लिए getJSONObject(i) इस्तेमाल करते हुए
'events' की value एक JSON array है, तो आप इसे root.getJSONArray('events') से पढ़ते हैं, फिर 0 से array.length() तक loop करते हैं और हर event object पाने के लिए getJSONObject(i) इस्तेमाल करते हैं (जिससे आप name और seats पढ़ते हैं)। Option A wrong है: 'events' एक array है, string नहीं, तो getString fail होता या इसे misread करता, आपको getter को actual type से match करना पड़ता है। Option C wrong है: array objects की एक list है, एक integer नहीं; getInt apply नहीं होता। Option D false है: Android का JSONArray arrays fine पढ़ता है। Rule: getter (list के लिए getJSONArray, object के लिए getJSONObject, leaves के लिए getString/getInt) को JSON की structure से match कीजिए।
Think first
API Data के लिए Standard Format JSON क्यों है?
APIs almost always JSON return करती हैं। JSON दूसरे formats पर default क्यों बना? फिर tap कीजिए।
Show the answer
क्योंकि JSON LIGHTWEIGHT, HUMAN-READABLE, और UNIVERSALLY SUPPORTED है, एक sweet spot hit करते हुए जो older formats miss कर गए। यह lightweight है: JSON का syntax minimal है (braces, brackets, colons, commas), तो responses compact हैं और network पर भेजने के लिए quick हैं, जो mobile connections पर matter करता है। यह human-readable है: आप एक JSON response को देखकर एक नज़र में समझ सकते हैं, जो APIs develop और debug करना opaque binary formats से कहीं ज़्यादा easy बनाता है। यह हर language के पहले से मौजूद data structures में naturally map होता है: JSON objects सिर्फ़ key-value maps हैं और arrays सिर्फ़ lists हैं, तो लगभग हर programming language, Kotlin, JavaScript, Python, Java, के पास इसे produce और parse करने के लिए built-in या easy support है (जैसे आपने अभी org.json से किया)। वह universality का मतलब है एक API JSON return कर सकती है और किसी भी चीज़ में लिखे clients से consume हो सकती है, जो exactly वह है जो web services को interoperability के लिए चाहिए। Historically, XML यह role fill करता था पर parse करने के लिए कहीं ज़्यादा verbose और cumbersome है, तो जैसे web और mobile apps explode हुईं, industry JSON के simpler, lighter model की तरफ़ gravitate हुई (जो, JavaScript object syntax से derived होने के कारण, web के लिए भी एक perfect fit था)। Combination, wire पर small, humans के लिए easy, machines के लिए trivial, और हर जगह supported, यही वजह है JSON APIs की de facto language बना। Simple, readable, और universal heavy और complex को beat करता है।
Summary
Key takeaways
- APIs data को JSON text की तरह return करती हैं, जिसे आपकी app को इस्तेमाल करने के लिए parse करना पड़ता है।
- JSON key-value pairs के objects { }, arrays [ ], और values (strings, numbers, booleans, null) है।
- Android का org.json इसे parse करता है: एक object के लिए JSONObject(text), एक list के लिए JSONArray।
- Typed getters से fields पढ़िए: getString, getInt, getBoolean; getJSONObject और getJSONArray से नीचे उतरिए।
- Pattern: container parse कीजिए, array लीजिए, 0 से length() तक loop कीजिए, हर item की fields extract कीजिए।
- Getters को JSON की actual structure और types से match कीजिए; Gson/Moshi जैसी libraries JSON को data classes में automatically map कर सकती हैं।
- Memory hook: JSONObject और JSONArray, array loop कीजिए, typed getters से fields निकालिए।