相关文章推荐
性感的毛豆  ·  GROUP BY 聚合函数 | ...·  1 年前    · 
仗义的炒面  ·  Day 12 - 什麼是 ...·  1 年前    · 
Collectives™ on Stack Overflow

Find centralized, trusted content and collaborate around the technologies you use most.

Learn more about Collectives

Teams

Q&A for work

Connect and share knowledge within a single location that is structured and easy to search.

Learn more about Teams
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");

The code is not working when I try to parse the inner json array, so I get:

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

The exception is pointing to this line:

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

Any help? tnx.

I've found a working code:

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

If you don't need the array (like the author), you can simply use

JSONParser parser = new JSONParser();
Object obj  = parser.parse(content);
                Although this is exact opposite to what the question asked, it solved my problem i.e. convert JSONObject to JSONArray...So +1 from my side
– AvinashK
                Nov 20, 2014 at 10:37

The first element of the sites array is an array, as you can see indenting the JSON:

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

Therefore you need to treat its value accordingly; probably you could do something like:

JSONObject site = (JSONObject)(((JSONArray)jsonSites.get(i)).get(0));
                Thank you, your answer helps me to know the problem then I solved it by creating a nested loop while j<site.length() to get site.get(j).toString()
– Nora
                Sep 6, 2016 at 17:50
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));
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 is right but explain it reverse

You can first read the whole content of file into a String.

FileInputStream fileInputStream = null;
String data="";
StringBuffer stringBuffer = new StringBuffer("");
    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();

Now You will have the whole content into String ( data variable ).

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

After that you can use jsonArray as you want.

If you want to re-filter the json data you can use following method. Given example is getting all document data from couchdb.

Gson gson = new Gson(); String resultJson = restTemplate.getForObject(url+"_all_docs?include_docs=true", String.class); JSONObject object = (JSONObject) new JSONParser().parse(resultJson); JSONArray rowdata = (JSONArray) object.get("rows"); List<Object>list=new ArrayList<Object>(); for(int i=0;i<rowdata.size();i++) { JSONObject index = (JSONObject) rowdata.get(i); JSONObject data = (JSONObject) index.get("doc"); list.add(data); // convert your list to json String devicelist = gson.toJson(list); return devicelist; I have same code, that convert to LinkedHashMap., but suddenly its stop to work and return by get("...") scala.some.Map. do you know what can be the problem? – user3937548 Oct 6, 2021 at 11:36

Thanks for contributing an answer to Stack Overflow!

  • Please be sure to answer the question. Provide details and share your research!

But avoid

  • Asking for help, clarification, or responding to other answers.
  • Making statements based on opinion; back them up with references or personal experience.

To learn more, see our tips on writing great answers.