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.