json-simple,从文件中读取

时间:2012-02-12 19:39:03

标签: java json-simple

我正在尝试遍历文件系统中的文件,该文件包含许多设备的配置信息。

该文件采用以下格式:

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

尝试获取内部键值对时,我收到以下错误:

线程“main”中的异常java.lang.ClassCastException:org.json.simple.JSONArray无法强制转换为org.json.simple.JSONObject     在mav2bac.loadDevices(bac.java:98)     在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());
            }

那么转换使用ContainerFactory并实例化包含这些值的对象的正确方法是什么?


2 个答案:

答案 0 :(得分:3)

问题是myDevicesInfo是json对象的数组而不是json对象。所以以下一行:

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

需要改为

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

答案 1 :(得分:2)

试试这个:

JSONParser parser = new JSONParser();
JSONObject jsonObject = (JSONObject) parser.parse(new FileReader(pathToJsonFile));
JSONArray features = (JSONArray) jsonObject.get("myDevicesInfo");
Iterator itr=features.iterator();

while(itr.hasNext()){
    JSONObject featureJsonObj = (JSONObject)itr.next();
    String deviceType = (String)featureJsonObj.get("DeviceType");
    String deviceName = (String) featureJsonObj.get("DeviceName");
    String ipadd = (String) featureJsonObj.get("IPAddress");
    String uname = (String) featureJsonObj.get("UserName");
    String pwd = (String) featureJsonObj.get("Password");                    
}