Как разбирать JSON в Android

Где я могу найти пошаговые инструкции о том, как разбирать канал JSON в Android? Я просто начинающий Android, желающий учиться.

Solutions Collecting From Web of "Как разбирать JSON в Android"

У Android есть все инструменты, необходимые для синтаксического анализа встроенного json. Ниже приведен пример, нет необходимости в GSON или что-то в этом роде.

Получите ваш JSON:

DefaultHttpClient httpclient = new DefaultHttpClient(new BasicHttpParams()); HttpPost httppost = new HttpPost(http://someJSONUrl/jsonWebService); // Depends on your web service httppost.setHeader("Content-type", "application/json"); InputStream inputStream = null; String result = null; try { HttpResponse response = httpclient.execute(httppost); HttpEntity entity = response.getEntity(); inputStream = entity.getContent(); // json is UTF-8 by default BufferedReader reader = new BufferedReader(new InputStreamReader(inputStream, "UTF-8"), 8); StringBuilder sb = new StringBuilder(); String line = null; while ((line = reader.readLine()) != null) { sb.append(line + "\n"); } result = sb.toString(); } catch (Exception e) { // Oops } finally { try{if(inputStream != null)inputStream.close();}catch(Exception squish){} } 

Теперь у вас есть свой JSON, и что?

Создайте JSONObject :

 JSONObject jObject = new JSONObject(result); 

Чтобы получить определенную строку

 String aJsonString = jObject.getString("STRINGNAME"); 

Чтобы получить конкретное логическое значение

 boolean aJsonBoolean = jObject.getBoolean("BOOLEANNAME"); 

Чтобы получить конкретное целое число

 int aJsonInteger = jObject.getInt("INTEGERNAME"); 

Чтобы получить определенный длинный

 long aJsonLong = jObject.getBoolean("LONGNAME"); 

Чтобы получить конкретную двойную

 double aJsonDouble = jObject.getDouble("DOUBLENAME"); 

Чтобы получить конкретный JSONArray :

 JSONArray jArray = jObject.getJSONArray("ARRAYNAME"); 

Чтобы получить элементы из массива

 for (int i=0; i < jArray.length(); i++) { try { JSONObject oneObject = jArray.getJSONObject(i); // Pulling items from the array String oneObjectsItem = oneObject.getString("STRINGNAMEinTHEarray"); String oneObjectsItem2 = oneObject.getString("anotherSTRINGNAMEINtheARRAY"); } catch (JSONException e) { // Oops } } 
  1. Написание класса JSON Parser

     public class JSONParser { static InputStream is = null; static JSONObject jObj = null; static String json = ""; // constructor public JSONParser() {} public JSONObject getJSONFromUrl(String url) { // Making HTTP request try { // defaultHttpClient DefaultHttpClient httpClient = new DefaultHttpClient(); HttpPost httpPost = new HttpPost(url); HttpResponse httpResponse = httpClient.execute(httpPost); HttpEntity httpEntity = httpResponse.getEntity(); is = httpEntity.getContent(); } catch (UnsupportedEncodingException e) { e.printStackTrace(); } catch (ClientProtocolException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } try { BufferedReader reader = new BufferedReader(new InputStreamReader( is, "iso-8859-1"), 8); StringBuilder sb = new StringBuilder(); String line = null; while ((line = reader.readLine()) != null) { sb.append(line + "\n"); } is.close(); json = sb.toString(); } catch (Exception e) { Log.e("Buffer Error", "Error converting result " + e.toString()); } // try parse the string to a JSON object try { jObj = new JSONObject(json); } catch (JSONException e) { Log.e("JSON Parser", "Error parsing data " + e.toString()); } // return JSON String return jObj; } } 
  2. Анализ данных JSON После того, как вы создали класс парсера, нужно знать, как использовать этот класс. Ниже я объясняю, как разбирать json (взятый в этом примере), используя класс парсера.

2.1. Сохраните все эти имена узлов в переменных: в контактах json у нас есть такие элементы, как имя, адрес электронной почты, адрес, пол и номера телефонов. Поэтому сначала нужно сохранить все эти имена узлов в переменных. Откройте основной класс активности и объявите имена всех узлов в статических переменных.

 // url to make request private static String url = "http://api.9android.net/contacts"; // JSON Node names private static final String TAG_CONTACTS = "contacts"; private static final String TAG_ID = "id"; private static final String TAG_NAME = "name"; private static final String TAG_EMAIL = "email"; private static final String TAG_ADDRESS = "address"; private static final String TAG_GENDER = "gender"; private static final String TAG_PHONE = "phone"; private static final String TAG_PHONE_MOBILE = "mobile"; private static final String TAG_PHONE_HOME = "home"; private static final String TAG_PHONE_OFFICE = "office"; // contacts JSONArray JSONArray contacts = null; 

2.2. Используйте класс парсера, чтобы получить JSONObject и выполнить цикл через каждый элемент json. Ниже я создаю экземпляр класса JSONParser и использую для цикла. Я прохожу через каждый элемент json и, наконец, сохраняю каждый json-данные в переменной.

 // Creating JSON Parser instance JSONParser jParser = new JSONParser(); // getting JSON string from URL JSONObject json = jParser.getJSONFromUrl(url); try { // Getting Array of Contacts contacts = json.getJSONArray(TAG_CONTACTS); // looping through All Contacts for(int i = 0; i < contacts.length(); i++){ JSONObject c = contacts.getJSONObject(i); // Storing each json item in variable String id = c.getString(TAG_ID); String name = c.getString(TAG_NAME); String email = c.getString(TAG_EMAIL); String address = c.getString(TAG_ADDRESS); String gender = c.getString(TAG_GENDER); // Phone number is agin JSON Object JSONObject phone = c.getJSONObject(TAG_PHONE); String mobile = phone.getString(TAG_PHONE_MOBILE); String home = phone.getString(TAG_PHONE_HOME); String office = phone.getString(TAG_PHONE_OFFICE); } } catch (JSONException e) { e.printStackTrace(); } 

Я закодировал простой пример для вас и аннотировал источник. В этом примере показано, как захватить live json и parse в JSONObject для извлечения деталей:

 try{ // Create a new HTTP Client DefaultHttpClient defaultClient = new DefaultHttpClient(); // Setup the get request HttpGet httpGetRequest = new HttpGet("http://example.json"); // Execute the request in the client HttpResponse httpResponse = defaultClient.execute(httpGetRequest); // Grab the response BufferedReader reader = new BufferedReader(new InputStreamReader(httpResponse.getEntity().getContent(), "UTF-8")); String json = reader.readLine(); // Instantiate a JSON object from the request response JSONObject jsonObject = new JSONObject(json); } catch(Exception e){ // In your production code handle any errors and catch the individual exceptions e.printStackTrace(); } 

После того, как у вас есть JSONObject, обратитесь к SDK для получения подробной информации о том, как извлечь требуемые данные.

Попробуйте выполнить этот учебник http://www.androidhive.info/2012/01/android-json-parsing-tutorial/ Надеюсь, это поможет вам начать с JSONParsing