我遇到了一个小问题,我认为可以找到一些解决方法,但我正在寻找正确的方法。
我在网格中使用Selenium,然后使用JSON文件配置所有节点。某些浏览器(Chrome,IE)需要特定的驱动程序。
这些驱动程序由该表单的键定义:webdriver.browser.driver
,浏览器= chrome 或即。所以,我们举个例子:
{"browserName": "chrome",
"maxInstances": 5,
"platform": "WINDOWS",
"webdriver.chrome.driver": "C:/Program Files (x86)/Google/Chrome/Application/chrome.exe" }
{"browserName": "internet explorer",
"maxInstances": 1,
"platform": "WINDOWS",
"webdriver.ie.driver": "C:/Program Files (x86)/Internet Explorer/iexplore.exe" }
我想获得价值并将其放入我的POJO的private String driverPath
。
有没有办法动态获取密钥的值?像正则表达式一样?
答案 0 :(得分:0)
从概念上讲,在两个对象中,属性"webdriver.chrome.driver"
和"webdriver.ie.driver"
代表相同的实体:驱动程序,因此该属性应该只被称为驱动程序。
通常,POJO <-> JSON
转化是一对一的,因此每个Java
字段有一个JSON
字段。
如果您无法更改JSON
,或者您认为自己现在需要它们,至少在Jackson
和GSON
,您可以注册自定义反序列化程序手动解析该值。
答案 1 :(得分:0)
将其解析为List
,例如使用jackson:
List<Map> list = (List<Map>) new ObjectMapper().readValue(json, List.class);
这里有一些工作代码:
String json = "[{\"browserName\": \"chrome\", \"maxInstances\": 5,\n \"platform\": \"WINDOWS\",\n" +
" \"webdriver.chrome.driver\": \"C:/Program Files (x86)/Google/Chrome/Application/chrome.exe\" }," +
"{\"browserName\": \"internet explorer\", \"maxInstances\": 1," +
" \"platform\": \"WINDOWS\", \"webdriver.ie.driver\": \"C:/Program Files (x86)/Internet Explorer/iexplore.exe\" }]";
List<Map> list = (List<Map>) new ObjectMapper().readValue(json, List.class);
String browser = "chrome";
String driver = list.stream()
.<String>map(m -> (String) m.get("webdriver." + browser + ".driver"))
.filter(s -> s != null)
.findFirst()
.orElse(null); // C:/Program Files (x86)/Google/Chrome/Application/chrome.exe
如果找不到,则 driver
将为null