2013-05-07 25 views
7

Tôi đánh một dịch vụ và đôi khi nhận lại một cái gì đó như thế này:Làm cách nào để biết liệu trả về là JSONObject hoặc JSONArray với JSON đơn giản (Java)?

{ "param1": "value1", "param2": "value2" } 

và đôi khi nhận được trở lại như thế này:

[{ "param1": "value1", "param2": "value2" },{ "param1": "value1", "param2": "value2" }] 

Làm thế nào để tôi biết mà tôi nhận được? Cả hai người đều đánh giá vào một String khi tôi làm getClass() nhưng nếu tôi cố gắng làm điều này:

json = (JSONObject) new JSONParser().parse(result); 

vào trường hợp thứ hai tôi nhận được một ngoại lệ

org.json.simple.JSONArray cannot be cast to org.json.simple.JSONObject 

Làm thế nào để tránh tình trạng này? Tôi chỉ muốn biết làm thế nào để kiểm tra xem tôi đang trở lại. (Trường hợp đầu tiên đôi khi sẽ có [] trong đó vì vậy tôi không thể lập chỉ mục và tôi muốn một cách rõ ràng hơn là chỉ kiểm tra ký tự đầu tiên

Đã có một số phương pháp kiểm tra điều này?

+0

Sẽ khá đơn giản để kiểm tra xem chuỗi có bắt đầu và kết thúc bằng '[]' hay không. Bạn đã thử cái gì? – ApproachingDarknessFish

+0

Tôi có thể biết nếu chúng sinh và kết thúc bằng [] nhưng sau đó vấn đề là tôi nhận được một chuỗi "[{\" param1 \ "...}, {...}]" mà tôi dường như không thể chuyển đổi vào một mảng một lần nữa. – PixMach

Trả lời

19

Java đơn giản:

Object obj = new JSONParser().parse(result); 
if (obj instanceof JSONObject) { 
    JSONObject jo = (JSONObject) obj; 
} else { 
    JSONArray ja = (JSONArray) obj; 
} 

bạn cũng có thể kiểm tra nếu (có mục đích) JSON bắt đầu với một [ hoặc một { nếu bạn muốn tránh việc phân tích các loại sai của JSON Nhưng hãy cẩn thận với. khoảng trắng hàng đầu.

+0

Cảm ơn. Điều đó đã trả lời câu hỏi của tôi. Bây giờ để tìm ra phần còn lại của nó :) – PixMach

+0

Cảm ơn Budy. :) – Krishna

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