Search code examples
javajson-simple

json-simple, reading from a file


I am trying to iterate through a file in the file system which contains configuration information for numerous devices.

The file is in this format:

 {
    "myDevicesInfo":
    [
        {
            "DeviceType":"foo", 
            "DeviceName":"foo1", 
            "IPAddress":"192.168.1.1", 
            "UserName":"admin", 
            "Password":"pw"
        }
    ]
}

I am getting the following error when trying to get the inner key-value pairs:

Exception in thread "main" java.lang.ClassCastException: org.json.simple.JSONArray cannot be cast to org.json.simple.JSONObject at mav2bac.loadDevices(bac.java:98) at mav2bac.main(bac.java:70)

File appBase = new File("."); //current directory
            String path = appBase.getAbsolutePath();
            System.out.println(path);

            Object obj = parser.parse(new FileReader("bac.yml"));

            JSONObject jsonObject = (JSONObject) obj;
            JSONObject jsonObjectDevice = (JSONObject)jsonObject;
            JSONObject deviceAttributes = (JSONObject) jsonObject.get("myDevicesInfo");

            Map json = (Map)parser.parse(jsonObject.toJSONString(), containerFactory);
            System.out.println(json.values());
            Iterator iter = json.entrySet().iterator();
            System.out.println("==iterate result==");
            while(iter.hasNext()){
              Map.Entry entry = (Map.Entry)iter.next();
              //System.out.println(entry.getKey() + "=>" + entry.getValue());
              System.out.println(entry.getValue());
            }

So what is the proper way to get convert use ContainerFactory and instantiate an object containing these values?



Solution

  • The problem is that myDevicesInfo is an array of json objects and not a json object. so the following line:

    JSONObject deviceAttributes = (JSONObject) jsonObject.get("myDevicesInfo");
    

    needs to change to

    JSONArray deviceAttributes = (JSONArray) jsonObject.get("myDevicesInfo");