2010-09-14 22 views
9

He buscado mucho en JSON Parsing en Android, pero no pude convencerme del todo. De hecho, tengo una idea breve pero no tan clara todavía con respecto a JSON Parsing.Análisis de JSON en Android

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

Respuesta

17

Esta es una muy simple JSON cadena

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

el fin de obtener valores para que utilice JSONObject así:

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 ligeramente compleja

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

Con el fin de extraer los 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 ...........

3

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

1

Una opción más: use Jackson.

Uso simple; si usted tiene un POJO que se unen 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); 

oa un árbol: (similar a lo que ofrece por defecto paquete org.json Android)

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.

0

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 de impresión creados JSON

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; 
    } 
} 

// actvity principal modelo

public class JSONParserActivity extends Activity { 


    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.main); 

     PrintJOSN printJOSN=new PrintJOSN(); 
     printJOSN.printJSONData(); 

    } 
} 

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; 
    } 


} 

constante de clase: Clase

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"; 
} 

Logger:

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 confirmar su registro, se mostrará JSON y JSON creado impresa.