2010-09-14 61 views
9

Tôi đã tìm kiếm rất nhiều về phân tích JSON trong Android, nhưng không thể thuyết phục được. Trên thực tế có một ý tưởng ngắn gọn nhưng chưa rõ ràng về JSON Parsing.Phân tích cú pháp JSON trong Android

Cách triển khai phân tích cú pháp JSON trong ứng dụng?

Trả lời

17

Đây là một rất đơn giản JSON Chuỗi

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

Để có được giá trị cho nó sử dụng JSONObject như thế này:

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

Đây là một chuỗi json hơi phức tạp

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

Để trích xuất các giá trị từ việc sử dụng này 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"); 
} 

Hope this helps một chút ...........

3

Bạn cũng có thể kiểm tra thư viện GSON của Google here. Hướng dẫn sử dụng GSON here có một số ví dụ hữu ích để giúp bạn bắt đầu. Tôi đã tìm thấy GSON đơn giản và mạnh mẽ.

1

Một lựa chọn khác: sử dụng Jackson.

Sử dụng đơn giản; nếu bạn có một POJO để ràng buộc vào:

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

đến một bản đồ:

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

hoặc một Tree: (tương tự như những gì mặc định Android gói org.json cung cấp)

JsonNode treeRoot = mapper.readTree(source); 

và các ví dụ khác có thể được tìm thấy tại http://wiki.fasterxml.com/JacksonInFiveMinutes.

Lợi ích so với các gói khác là nó nhanh như chớp; rất linh hoạt và linh hoạt (POJO, bản đồ/danh sách, cây json, thậm chí trình phân tích cú pháp phát trực tuyến) và được tích cực phát triển.

0

Lớp này sẽ xây dựng các đối tượng 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; 
    } 
} 

// Lớp này sẽ in tạo 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 chính mô hình

public class JSONParserActivity extends Activity { 


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

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

    } 
} 

Sinh viên:

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


} 

lớp không đổi:

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 lớp:

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

Vui lòng kiểm tra đăng nhập của bạn, nó sẽ hiển thị tạo json và json in.

Các vấn đề liên quan