Tôi đang sử dụng khá nhiều việc phân tích cú pháp JSON trong một ứng dụng tôi đang viết. Hầu hết những gì tôi đã thực hiện đã được triển khai bằng cách sử dụng thư viện JSONObject được tích hợp sẵn của Android (có phải là json-lib không?).JSON: Trình phân tích luồng của Jackson - có thực sự đáng giá không?
JSONObject dường như tạo ra các phiên bản hoàn toàn mọi thứ trong chuỗi JSON ... ngay cả khi tôi không kết thúc bằng cách sử dụng tất cả chúng.
Ứng dụng của tôi hiện hoạt động khá tốt, ngay cả trên G1.
Câu hỏi của tôi là: tốc độ và bộ nhớ có được lợi ích từ việc sử dụng trình phân tích cú pháp luồng như Jackson đáng giá không?
By rắc rối, tôi muốn nói điều này: Theo như tôi có thể nói, có ba nhược điểm để sử dụng Jackson thay vì xây dựng trong thư viện:
- Sự phụ thuộc vào một thư viện bên ngoài. Điều này làm cho .apk của bạn lớn hơn cuối cùng. Không phải là một vấn đề lớn.
- Ứng dụng của bạn dễ vỡ hơn. Vì việc phân tích cú pháp không được thực hiện tự động, nó dễ bị tổn thương hơn với các thay đổi trong văn bản JSON mà nó phân tích cú pháp (có lẽ tôi sai về điều này).
- Viết mã để phân tích cú pháp JSON thông qua trình phân tích luồng là xấu và tẻ nhạt.
Tôi không đồng ý với # 2. Nếu cấu trúc JSON thay đổi một cách bất ngờ, bạn thực sự không may mắn. –
Không đúng trong một số trường hợp nhất định .. ví dụ, thêm một đối tượng làm giá trị trong đối tượng khác. Trừ khi bạn lên kế hoạch cho nó trong trình phân tích cú pháp kéo, nó sẽ ném nó đi, trong khi với JSONObject, nó sẽ hoạt động. Ví dụ: Thay đổi { "first_name": "Adam", "last_name": "Olsen" } để { "first_name": "Adam, " last_name: "Olsen", "phone_numbers": { "nhà riêng": "555-867-5309", "cơ quan": "888-555-5555" } } Sẽ ném trình phân tích cú pháp kéo của bạn ra trong vòng lặp như: while (parser .nextToken()! = JsonToken.END_OBJECT) - Bạn sẽ kết thúc đánh sớm END_OBJECT, nơi JSONObject sẽ phân tích cú pháp của nó. – synic
Có thể viết trình phân tích cú pháp luồng để đối phó với điều đó. Tôi tin rằng đây là những gì shipChildren (http://jackson.codehaus.org/1.5.0/javadoc/org/codehaus/jackson/JsonParser.html#skipChildren%28%29) là dành cho. –