2011-06-22 30 views
14

Tôi đang cố gắng để phân tích một đầu ra từ một máy chủ mà trông như thế này:Parse JSON với org.json

{ 
    "GetFolderFilesByZoneResult": [ 
    { 
     "ID": 98748, 
     "CreatedBy": "", 
     "UpdatedBy": "none", 
     "CreatedDate": "\/Date(1308273033620+0100)\/", 
     "UpdatedDate": "\/Date(1308303003770+0100)\/", 
     "CommentCount": 0, 
     "Key": "", 
     "Enabled": true, 
     "MimeType": "video", 
     "Votes": 2, 
     "TotalRating": 0, 
     "AllowComments": true, 
     "ViewCount": 323, 
     "ReleaseDate": "\/Date(1308273000000+0100)\/", 
     "ExpireDate": "\/Date(4102444800000+0000)\/", 
     "Author": "", 
     "Size": 133799936, 
     "Tag1": "", 
     "Tag2": "", 
     "Tag3": "", 
     "RecycleBin": false 
    }, 
    { 
     "ID": 99107, 
     "CreatedBy": "", 
     "UpdatedBy": "none", 
     "CreatedDate": "\/Date(1308583412520+0100)\/", 
     "UpdatedDate": "\/Date(1308583564007+0100)\/",  
     "CommentCount": 0, 
     "Key": "", 
     "Enabled": true, 
     "MimeType": "video", 
     "Votes": 0, 
     "TotalRating": 0, 
     "AllowComments": true, 
     "ViewCount": 33, 
     "ReleaseDate": "\/Date(1308583380000+0100)\/", 
     "ExpireDate": "\/Date(4102444800000+0000)\/", 
     "Author": "", 
     "Size": 47955968, 
     "Tag1": "", 
     "Tag2": "", 
     "Tag3": "", 
     "RecycleBin": false 
    } 
    ] 
} 

Tôi đang cố gắng để sử dụng Java org.json để phân tích nó, nhưng tôi don' t có bất kỳ trải nghiệm nào với JSON/org.json, vì vậy tôi gặp một chút rắc rối. Làm thế nào tôi có thể phân tích cú pháp này?

+0

Sau khi phân tích cú pháp dữ liệu từ đầu vào JSON, bạn định sử dụng nó như thế nào trong mã Java? Bạn đang cố gắng để cư một cấu trúc dữ liệu Java tùy chỉnh, hay bạn chỉ muốn nhanh chóng lấy một hoặc hai giá trị từ JSON và tiếp tục? –

Trả lời

29

1) Giả sử bạn có thư viện JSON trên đường dẫn của bạn (từ www.json.org), nó khá dễ dàng.

import org.json.JSONTokener; 
... 

URI uri = new URI("http://someserver/data.json"); 
JSONTokener tokener = new JSONTokener(uri.toURL().openStream()); 
JSONObject root = new JSONObject(tokener); 

Từ đó, bạn có thể giải quyết các phần khác nhau của đối tượng JSON. Hãy xem Javadocs để biết chi tiết cụ thể. https://developer.android.com/reference/org/json/package-summary.html

+0

Với điều đó tôi nhận được lỗi sau trên dòng cuối cùng: Ngoại lệ trong chủ đề "chính" java.lang.RuntimeException: Mã nguồn không thể giải mã - Loại cron không hợp lệ:

+0

Bạn có thể đăng mã mà bạn đang gặp sự cố không? – JohnnyO

+0

Với mã chính xác bạn đã đăng, sự khác biệt duy nhất là url được sử dụng –

-2

Tôi muốn vượt qua nó

map<String, Object> 

nạp với

map<String, Object> 

trong lĩnh vực đối tượng.

Về cơ bản, tái tạo cấu trúc phân cấp của các lớp java bên trong bản đồ lớn.

Ví dụ:

return (Map<"GetFolderFilesByZoneResult", Map<"Result1", (object by id 98748) | "Result2", (object by id 99107) | "Result3", etc. 

JSON sẽ trở lại mà bản đồ lớn rất đẹp như thế, và lập trình nó dễ dàng hơn để làm sau đó danh sách.

+1

Tôi hiểu, nhưng làm cách nào tôi có thể phân tích các đối tượng/mảng/giá trị đó bằng org.json? Bạn có thể cung cấp một số mã không? –

+0

Nó tự động hóa. Đẩy nó một đối tượng và nó giải mã nó. Ví dụ trong ví dụ bản đồ của tôi, nó giải mã trường biến "String ID = 99107" thành JSON là "ID: 99107". – TravMan

+0

Tôi nghĩ câu hỏi hoàn toàn ngược lại, lấy nội dung json và nhận giá trị của nó trong đối tượng java. –

4

Dưới đây là giải pháp phổ biến nhất, cho phép phân tích bất kỳ loại JSON vào loại Java thích hợp:

Object json = new JSONTokener(response).nextValue(); 

Sau đó, bạn có thể xác định kết quả loại và xử lý nó một cách thích hợp.