Java 杰克逊-可变键

Java 杰克逊-可变键,java,json,jackson,Java,Json,Jackson,我面临一个小问题,我认为可以找到一些解决办法,但我正在寻找正确的方法 我在网格中使用Selenium,然后用JSON文件配置所有节点。一些浏览器(Chrome、IE)需要特定的驱动程序 这些驱动程序由以下形式的键定义:webdriver.browser.driverwith browser=chrome或ie。因此,我们有以下示例: {"browserName": "chrome", "maxInstances": 5, "platform": "WINDOWS", "webdriv

我面临一个小问题,我认为可以找到一些解决办法,但我正在寻找正确的方法

我在网格中使用Selenium,然后用JSON文件配置所有节点。一些浏览器(Chrome、IE)需要特定的驱动程序

这些驱动程序由以下形式的键定义:
webdriver.browser.driver
with browser=chrome或ie。因此,我们有以下示例:

{"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


有没有办法动态获取密钥的值?与正则表达式一样?

从概念上讲,在这两个对象中,属性
“webdriver.chrome.driver”
“webdriver.ie.driver”
表示相同的实体:驱动程序,因此该属性应称为driver

通常,
POJO-JSON
转换是一对一的,因此每个
JSON
字段有一个
Java
字段

如果您无法更改
JSON
,或者您觉得需要让它们保持现在的样子,至少在
Jackson
GSON
中,您可以注册一个自定义反序列化程序并手动对该值进行解析


您可以在这里看到示例:

将其解析为
列表,例如使用jackson:

List<Map> list = (List<Map>) new ObjectMapper().readValue(json, List.class);
List List=(List)newObjectMapper().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
String json=“[{\'browserName\”:\'chrome\,\'maxInstances\”:5、\n\'platform\:\'WINDOWS\,\n”+
“\“webdriver.chrome.driver\”:\“C:/ProgramFiles(x86)/Google/chrome/Application/chrome.exe\”+
{\'browserName\':\'internet explorer\',\'maxInstances\':1+
“\'platform\':\'WINDOWS\',\'webdriver.ie.driver\':\'C:/Program Files(x86)/internetexplorer/iexplore.exe\'”;
List=(List)newObjectMapper().readValue(json,List.class);
String browser=“chrome”;
字符串驱动程序=list.stream()
.map(m->(字符串)m.get(“webdriver.+browser+.driver”))
.filter(s->s!=null)
.findFirst()
.orElse(空);//C:/ProgramFiles(x86)/Google/Chrome/Application/Chrome.exe

driver
将是
null
如果找不到

你应该用Pojo类映射Json,我已经说过了。这是两个不同Json文件的内容吗?如果不是,则是无效的json输入。如果您可以澄清输入,我可以向您展示如何使用jackson(java)分配存储和提取所需内容。