2010-09-14 39 views
9

Ich habe viel auf JSON Parsing in Android gesucht, konnte aber nicht ganz davon überzeugt. Eigentlich eine kurze Idee, aber noch nicht so klar in Bezug auf JSON Parsing.JSON Parsing in Android

Wie implementiert man die JSON-Analyse in der Anwendung?

Antwort

17

Dies ist ein sehr einfaches JSON String

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

Um Werte zu erhalten dafür JSONObject wie folgt verwenden:

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

Dies ist ein leicht komplexe JSON-Zeichenfolge

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

Um Werte aus dieser Verwendung 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"); 
} 

hoffe, das hilft ein wenig zu extrahieren ...........

3

Sie auch Gson Bibliothek Google überprüfen können here. Das GSON-Benutzerhandbuch here enthält einige nützliche Beispiele, die Ihnen den Einstieg erleichtern. Ich habe festgestellt, dass GSON einfach und leistungsfähig ist.

1

Eine weitere Wahl: Verwenden Sie Jackson.

Einfache Verwendung; wenn Sie eine POJO haben zu binden:

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

auf eine Karte:

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

oder auf einen Baum: (ähnlich wie Standard-Android org.json Paket enthält)

JsonNode treeRoot = mapper.readTree(source); 

und weitere Beispiele finden Sie unter http://wiki.fasterxml.com/JacksonInFiveMinutes.

Vorteile im Vergleich zu anderen Paketen ist, dass es blitzschnell ist; sehr flexibel und vielseitig (POJOs, Karten/Listen, JSON-Bäume, sogar Streaming-Parser), und wird aktiv entwickelt.

0

Diese Klasse umfasst die Json Objekt konstruieren:

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

// Diese Klasse 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; 
    } 
} 

// Haupt actvity

public class JSONParserActivity extends Activity { 


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

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

    } 
} 

Studentenmodell erstellt wird Druck:

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


} 

Constant Klasse:

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 Klasse:

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

Bitte überprüfen Sie Ihre Log, wird es erstellt json und gedruckt json zeigen.