Análisis JSON en Android

He buscado mucho en JSON Parsing en Android, pero no estaba del todo convencido. De hecho, tengo una idea breve pero no tan clara todavía con respecto a JSON Parsing.

¿Cómo implementar el análisis JSON en la aplicación?

Esta es una cadena JSON muy simple

{"key1":"value1","key2":"value2"} 

Para obtener valores para él, usa JSONObject esta manera:

 JSONObject json_obj=new JSONObject(your json string); String value1=json_obj.getString("key1"); String value2=json_obj.getString("key2"); 

Esta es una cadena json un poco compleja

 [{"key1":"value1","key2":"value2"},{"key1":"value1","key2":"value2"}] 

Para extraer valores de este uso, JSONArray

 JSONArray jArray=new JSONArray(your json string); for(int i=0;i<(jArray.length());i++) { JSONObject json_obj=jArray.getJSONObject(i); String value1=json_obj.getString("key1"); String value2=json_obj.getString("key2"); } 

Espero que esto ayude un poco...........

También puede consultar la biblioteca GSON de Google aquí . La guía del usuario GSON aquí tiene algunos ejemplos útiles para ayudarlo a comenzar. He descubierto que GSON es simple y poderoso.

Ver: http://developer.android.com/reference/org/json/package-summary.html

Principalmente, trabajarás con JSONArray y JSONObject .

Ejemplo simple:

  try { JSONObject json = new JSONObject(jsonString); int someInt = json.getInt("someInt"); String someString = json.getString("someString"); } catch (JSONException e) { Log.d(TAG, "Failed to load from JSON: " + e.getMessage()); } 

Puede usar el paquete org.json , incluido en el SDK.

Vea aquí: http://developer.android.com/reference/org/json/JSONTokener.html

Una opción más: usa Jackson.

Uso simple; si tienes un POJO para vincular a:

  ObjectMapper mapper = new ObjectMapper(); // reusable MyClass value = mapper.readValue(source, MyClass.class); // source can be String, File, InputStream // back to JSON: String jsonString = mapper.writeValue(value); 

a un mapa:

  Map map = mapper.readValue(source, Map.class); 

o a un Árbol: (similar a lo que proporciona el paquete predeterminado de Android org.json)

  JsonNode treeRoot = mapper.readTree(source); 

y más ejemplos se pueden encontrar en http://wiki.fasterxml.com/JacksonInFiveMinutes .

Beneficios en comparación con otros paquetes es que es muy rápido; muy flexible y versátil (POJOs, maps / lists, json trees, incluso el analizador de transmisión), y se desarrolla activamente.

Esta clase construirá el objeto json:

 public class CreateJSON { private JSONArray mStudArray; private JSONObject mStudObject; Student [] student=new Student[3] ; public CreateJSON() { } public void initData() { //date wirte in student array student[0]=new Student(); student[0].setmStudName("Vikas"); student[0].setmPhoneNo("1234567890"); student[0].setmRollNo(1); student[1]=new Student(); student[1].setmStudName("Rahul"); student[1].setmPhoneNo("1234567890"); student[1].setmRollNo(2); student[2]=new Student(); student[2].setmStudName("Raj"); student[2].setmPhoneNo("1234567890"); student[2].setmRollNo(3); } //student array converts to json array public String writeDataTOJOSON() { //JONS array created here mStudArray=new JSONArray(); initData(); for(int i=0;i<3;i++) { mStudArray.put(createJOSNObject(student[i])); } return mStudArray.toString(); } //student object converted into json object public JSONObject createJOSNObject(Student student) { try { mStudObject=new JSONObject(); mStudObject.put(Constants.NAME,student.getmStudName()); mStudObject.put(Constants.PHONE_NUMBER,student.getmPhoneNo()); mStudObject.put(Constants.ROLL_NUMBER,student.getmRollNo()); } catch (JSONException e) { e.printStackTrace(); } return mStudObject; } } 

// Esta clase imprimirá json creado

 public class PrintJOSN { private CreateJSON createJSON; private JSONArray mStudnetArray; public String printJSONData() { createJSON=new CreateJSON(); //JSONArray created here. String jons=createJSON.writeDataTOJOSON(); //JONS in String fomart Logger.debug("json"+mStudnetArray); //JOSN array create from string try { mStudnetArray=new JSONArray(jons); } catch (JSONException e1) { // TODO Auto-generated catch block e1.printStackTrace(); } //parse array parse here for(int i=0;i<3;i++) { try { JSONObject studentObj=(JSONObject) mStudnetArray.get(i); String name=studentObj.getString("name"); String phone=studentObj.getString("phone_number"); Integer rollnumber=studentObj.getInt("roll_number"); Logger.debug("Student Object::: "+name+" "+phone+" "+rollnumber); } catch (JSONException e) { // TODO Auto-generated catch block e.printStackTrace(); } } return null; } } 

// Actividad principal

 public class JSONParserActivity extends Activity { @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); PrintJOSN printJOSN=new PrintJOSN(); printJOSN.printJSONData(); } } 

Modelo de estudiante:

 public class Student { private String mStudName; private String mPhoneNo; private Integer mRollNo; public String getmStudName() { return mStudName; } public void setmStudName(String mStudName) { this.mStudName = mStudName; } public String getmPhoneNo() { return mPhoneNo; } public void setmPhoneNo(String mPhoneNo) { this.mPhoneNo = mPhoneNo; } public Integer getmRollNo() { return mRollNo; } public void setmRollNo(Integer mRollNo) { this.mRollNo = mRollNo; } } 

Clase constante:

 public class Constants { public static final String NAME="name"; public static final String ROLL_NUMBER="roll_number"; public static final String PHONE_NUMBER="phone_number"; } 

Clase de registrador:

 public class Logger { public static final String APP_ID = "androidapp"; public static String logDir = "/androidapp"; public static String logFileName = "/log.txt"; public static boolean writeLogsToFile = false; public static final int LOG_LEVEL_VERBOSE = 4; public static final int LOG_LEVEL_DEBUG = 3; public static final int LOG_LEVEL_INFO = 2; public static final int LOG_LEVEL_ERROR = 1; public static final int LOG_LEVEL_OFF = 0; public static final int CURRENT_LOG_LEVEL = LOG_LEVEL_DEBUG; public static void log(String message, int logLevel) { if (logLevel > CURRENT_LOG_LEVEL) { return; } else { Log.v(APP_ID, message); if (writeLogsToFile) { writeToFile(message); } } } private static void writeToFile(String message) { try { File sdCard = Environment.getExternalStorageDirectory(); File dir = new File(sdCard.getAbsolutePath() + logDir); dir.mkdirs(); File file = new File(dir, logFileName); PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter(file, true), 8 * 1024)); writer.println(APP_ID + " " + new Date().toString() + " : " + message); writer.flush(); writer.close(); } catch (Exception e) { e.printStackTrace(); } } public static void verbose(String message) { log(message, LOG_LEVEL_VERBOSE); } public static void debug(String message) { log(message, LOG_LEVEL_DEBUG); } public static void error(String message) { log(message, LOG_LEVEL_ERROR); } public static void info(String message) { log(message, LOG_LEVEL_INFO); } } 

Por favor, compruebe su registro, se mostrará creado JSON y JSON impreso.