2013-08-26 26 views
7

Tôi đang cố gắng để phân tích dưới đây json file:org.json.simple.JSONArray không thể được đúc để org.json.simple.JSONObject

{"units":[{"id":42,    
    "title":"Hello World",   
    "position":1, 
    "v_id":9, 
    "sites":[[{"id":316, 
     "article":42, 
     "clip":133904 
     }], 
     {"length":5}] 

    }, ..]} 

Đây là những gì tôi đã cố gắng:

Object obj = null; 
JSONParser parser = new JSONParser(); 
Object unitsObj = parser.parse(new FileReader("file.json"); 
JSONObject unitsJson = (JSONObject) unitsObj; 

JSONArray units = (JSONArray) unitsJson.get("units"); 
Iterator<String> unitsIterator = units.iterator(); 
while(unitsIterator.hasNext()){   
    Object uJson = unitsIterator.next(); 
    JSONObject uj = (JSONObject) uJson; 
    obj = parser.parse(uj.get("sites").toString()); 
    JSONArray jsonSites = (JSONArray) obj; 

    for(int i=0;i<jsonSites.size();i++){ 
    JSONObject site = (JSONObject)jsonSites.get(i); // Exception happens here. 
    System.out.println(site.get("article"); 
    } 
} 

mã này không hoạt động khi tôi cố gắng phân tích các nội json array, vì vậy tôi có được:

Exception in thread "main" java.lang.ClassCastException: org.json.simple.JSONArray cannot be cast to org.json.simple.JSONObject 

các ngoại lệ được trỏ đến dòng này:

JSONObject site = (JSONObject)jsonSites.get(i); 

Bất kỳ trợ giúp nào? tnx.

+0

Trong '' sites'' có vẻ như là một mảng trong một mảng, hãy lưu ý các dấu ngoặc vuông kép. – qqilihq

Trả lời

4

Yếu tố đầu tiên của mảng sites là một mảng, như bạn có thể nhìn thấy thụt JSON:

{"units":[{"id":42,    
    ... 
    "sites": 
    [ 
     [ 
     { 
      "id":316, 
      "article":42, 
      "clip":133904 
     } 
     ], 
     {"length":5} 
    ] 
    ... 
} 

Vì vậy, bạn cần phải mối đe dọa giá trị của nó phù hợp; có lẽ bạn có thể làm một cái gì đó như:

JSONObject site = (JSONObject)(((JSONArray)jsonSites.get(i)).get(0)); 
+1

Tôi vẫn nhận được ngoại lệ tương tự: 'JSONObject không thể truyền sang JSONArray' – tokhi

+0

Cảm ơn bạn, câu trả lời của bạn giúp tôi biết vấn đề sau đó tôi đã giải quyết nó bằng cách tạo vòng lặp lồng nhau trong khi' j

1

JSONObject site=jsonSites.getJSONObject(i) nên làm việc ra

+0

không có phương thức' getJSONObject' cho 'JSONArray' – tokhi

+0

http://www.json.org/javadoc/org/json/JSONArray.html#getJSONObject(int) –

+0

I đang sử dụng cái này: 'org.json.simple.JSON' – tokhi

9

Tôi đã tìm thấy một mã làm việc:

JSONParser parser = new JSONParser(); 
Object obj = parser.parse(content); 
JSONArray array = new JSONArray(); 
array.add(obj); 
+1

Mặc dù điều này hoàn toàn trái ngược với câu hỏi được hỏi, nó giải quyết được vấn đề của tôi tức là chuyển đổi JSONObject thành JSONArray ... Vì vậy, +1 từ phía tôi – avinash

0

sử dụng jsonsimpleobject bạn direclty như dưới đây

JSONObject unitsObj = parser.parse(new FileReader("file.json"); 
0
JSONObject obj=(JSONObject)JSONValue.parse(content); 
JSONArray arr=(JSONArray)obj.get("units"); 
System.out.println(arr.get(1)); //this will print {"id":42,...sities ..} 

@cyberz là đúng nhưng giải thích nó đảo ngược

+0

nó là mã có liên quan và sẽ hoạt động. – Ars

1

này làm việc:

System.out.println("resultList.toString() " + resultList); 
      org.json.JSONObject obj = new JSONObject(resultList); 
      org.json.JSONArray jsonArray = obj.getJSONArray(someField); 

      for(int i=0;i<jsonArray.length();i++){ 
       System.out.println("array is " + jsonArray.get(i)); 

      } 
0

Trước tiên, bạn có thể đọc toàn bộ nội dung của tập tin vào một String.

FileInputStream fileInputStream = null; 
String data=""; 
StringBuffer stringBuffer = new StringBuffer(""); 
try{ 
    fileInputStream=new FileInputStream(filename); 
    int i; 
    while((i=fileInputStream.read())!=-1) 
    { 
     stringBuffer.append((char)i); 
    } 
    data = stringBuffer.toString(); 
} 
catch(Exception e){ 
     LoggerUtil.printStackTrace(e); 
} 
finally{ 
    if(fileInputStream!=null){ 
     fileInputStream.close(); 
    } 
} 

Bây giờ, bạn sẽ có toàn bộ nội dung thành Chuỗi (biến dữ liệu).

JSONParser parser = new JSONParser(); 
org.json.simple.JSONArray jsonArray= (org.json.simple.JSONArray) parser.parse(data); 

Sau đó bạn có thể sử dụng jsonArray như bạn muốn.

+0

Không hoạt động !!! –

+0

@VeerShrivastav hiển thị mã ur sau đó tôi có thể giúp bạn. – LoveToCode

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