2010-01-09 38 views
7

Tôi muốn biết cách phân tích cú pháp nguồn cấp dữ liệu JSON theo các mục (ví dụ: url/tiêu đề/mô tả cho mỗi mục). Tôi đã có một cái nhìn để doc/api nhưng, nó đã không giúp tôi.Phân tích cú pháp Nguồn cấp dữ liệu Json với google Gson

Đây là những gì tôi có cho đến nay

import com.google.gson.Gson; 
import com.google.gson.JsonObject; 

public class ImportSources extends Job { 
    public void doJob() throws IOException { 
     String json = stringOfUrl("http://feed.test/all.json"); 
     JsonObject jobj = new Gson().fromJson(json, JsonObject.class); 
     Logger.info(jobj.get("responseData").toString()); 
    } 
    public static String stringOfUrl(String addr) throws IOException { 
     ByteArrayOutputStream output = new ByteArrayOutputStream(); 
     URL url = new URL(addr); 
     IOUtils.copy(url.openStream(), output); 
     return output.toString(); 
    } 
} 

Trả lời

9

Phụ thuộc vào định dạng JSON thực tế. Bạn có thể thực tế chỉ cần tạo một lớp Javabean tùy chỉnh phù hợp với định dạng JSON. Bất kỳ trường nào trong JSON đều có thể được ánh xạ dưới dạng String, Integer, Boolean, v.v. Thuộc tính Javabean. Bất kỳ mảng nào cũng có thể được ánh xạ thành các thuộc tính List. Bất kỳ đối tượng nào cũng có thể được ánh xạ như một thuộc tính lồng nhau Javabean khác. Nó giúp giảm đáng kể việc xử lý tiếp theo trong Java.

Không có ví dụ chuỗi JSON từ bên cạnh bạn, nó chỉ đoán nó trông như thế nào, vì vậy tôi không thể đưa ra ví dụ cơ bản ở đây. Nhưng tôi đã đăng câu trả lời tương tự trước đây, bạn có thể tìm thấy nó hữu ích:

Gson cũng có một User Guide, bạn có thể tìm thấy nó hữu ích như là tốt.

+0

Cám ơn câu trả lời của bạn, tôi đã cố gắng áp dụng các ví dụ để các thức ăn sau: http://www.stocktwits.com/ stream/all.json. Tôi đã không quản lý để có được bất kỳ giá trị khác hơn null. Tôi có cần tạo hai nhóm: luồng và tweet không? – Roch

0

Tôi không biết liệu GSON có thể thực hiện ràng buộc trực tuyến/tăng dần hay không (tôi nghĩ là không).

Nhưng có lý do cụ thể nào để chỉ xem xét thư viện cụ thể đó không? Các thư viện xử lý JSON Java khác cho phép xử lý như vậy (bạn có thể kiểm tra các liên kết mà câu trả lời khác có cho một số ý tưởng), vì nó là tính năng khá quan trọng khi xử lý các nguồn cấp dữ liệu lớn.

+0

Tôi đã sử dụng ROME cho nguồn cấp dữ liệu RSS và khung tôi đang sử dụng chứa gson, Đó là lý do tại sao tôi đang cố gắng sử dụng nó, nhưng tôi mở thư viện khác. – Roch

+0

Ok. Như tôi đã nói, tôi nghĩ GSON chỉ thực hiện việc ràng buộc tài liệu đầy đủ, nhưng tôi không phải là 100%. Để thay thế, Jackson (http://jackson.codehaus.org) cho phép ràng buộc gia tăng, cũng như nhiều chế độ hoạt động khác. Cách hoạt động là bạn cần có một JsonParser cho điều chính, lặp qua mảng hoặc đối tượng JSON chính, và gọi parser.readValueAs() để thực sự ràng buộc. Danh sách gửi thư của người dùng có thể trợ giúp với các chi tiết, nếu tài liệu không có đủ con trỏ. – StaxMan

3

Gson 1.4 có API JsonStreamParser mới cho phép bạn phân tích cú pháp nhiều đối tượng JSON một từ một luồng.

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