有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java jsonsimple,从文件中读取

我试图遍历文件系统中的一个文件,其中包含许多设备的配置信息

该文件的格式如下:

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

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

线程“main”java中出现异常。lang.ClassCastException:org。json。易于理解的JSONArray不能被强制转换为组织。json。易于理解的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());
            }

那么,获得convert use ContainerFactory并实例化包含这些值的对象的正确方法是什么呢



共 (2) 个答案

  1. # 1 楼答案

    试试这个:

    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");                    
    }
    
  2. # 2 楼答案

    问题是myDevicesInfo是json对象的数组,而不是json对象。所以下面这句话:

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

    需要换成

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