2016-03-04 109 views
0

我面臨一個小問題,我認爲可以找到一些解決方法,但我正在尋找正確的方式來做到這一點。傑克遜 - 變鍵

我使用Selenium和Grid,然後使用JSON文件配置我的所有節點。某些瀏覽器(Chrome,IE)需要特定的驅動程序。

這些驅動程序是由形式的一個關鍵定義:webdriver.browser.driver與瀏覽器= 。所以,我們已經有了例如:

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

你應該用一個Pojo類映射Json –

+0

已經做到了,我說過了。 – buzz2buzz

+0

這是2個不同的json文件的內容?如果不是,則它是無效的json輸入。如果你可以澄清輸入,我可以告訴你如何分配存儲空間,並使用jackson(java)提取你想要的東西。 – Andy

回答

0

從概念上講,在這兩個你的對象,屬性"webdriver.chrome.driver""webdriver.ie.driver"代表相同的實體:司機,所以屬性應該僅僅被稱爲驅動程序。

通常一個POJO <-> JSON轉換是打算一對一,所以一個Java字段每JSON字段。

如果你不能改變JSON或者你覺得你需要他們像他們現在是正確的,至少在JacksonGSON,你可以註冊一個自定義解串器和手動進行該值的解析。

你可以在這裏看到的例子:http://www.baeldung.com/jackson-deserialization

0

使用解析它作爲一個List,例如傑克遜:

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如果n是null ot發現