2013-02-08 98 views
1

我正在通過solr進行搜索。它給了我json的迴應。如下所示:solr json用java解析

{response 
{numfound:# , docs{ 
    [ 
    { 
    id="#" 
    model="#" 
    } 
    { 
    id="#" 
    model="#" 
    } 
    ] 
    } 
    } 

我想從中只提取id並從它們中創建java數組列表。

有人可以告訴我如何在編碼語言中做到這一點嗎?

問題:如何從兒子字符串中提取id並將其轉換爲java數組列表如果我在java中使用hashmap或objectmapper?

感謝名單

回答

1

如果你想轉換成Java對象,你可以使用Solr客戶端工作Solrj
Solrj會給你和容易的選擇查詢的Solr和讀取XML轉換成Java對象
對於JSON你可以使用jackson庫來解析Solr響應。

+0

如何使用jackson庫從json中獲取id作爲arraylist(如上例中所述)? – user1964901 2013-02-11 02:05:23

+1

http://www.sivalabs.in/2011/03/json-processing-using-jackson-java-json.html – Jayendra 2013-02-11 09:57:37

0

正如Jayendra指出的,如果您使用Java查詢Solr,則可以使用SolrJ。由於XML解析開銷,我不建議使用XML作爲響應格式。 SolrJ支持java二進制對象編碼(使用commons-codec)開箱即用,默認情況下在查詢

要在更新使用它,你必須將它設置使用

server.setRequestWriter(new BinaryRequestWriter()); 

手動,你必須在服務器上啓用了BinaryUpdateHandler過,使用:

<requestHandler name="/update/javabin" class="solr.BinaryUpdateRequestHandler" /> 

在這種情況下你不不想使用SolrJ,你可以使用GSON來解析它。 Here你有例子。

+0

所以,這樣做。結果是什麼?我的意思是在我的問題,通過這樣做,我會得到json格式的查詢結果?我如何才能提取ID(上面提到的例子在我的問題)。 – user1964901 2013-02-11 02:02:39

1

這是一個使用Gson庫讀取數據的小程序。

@Test 
public void testRead() throws IOException { 
    final String testUrl = "http://localhost:8983/solr/collection1/select?q=*%3A*&wt=json&indent=true"; 
    String out = new Scanner(new URL(testUrl).openStream(), "UTF-8").useDelimiter("\\A").next(); 
    SolrResult result = new Gson().fromJson(out, SolrResult.class); 
    List<String> ids = new ArrayList<String>(); 
    for (Doc doc : result.response.docs) { 
     ids.add(doc.id); 
    } 
    System.err.println(ids); 
} 

它採用以下三個小班作爲響應的Java表示:

public class SolrResult { 
    public Response response; 
} 

class Response { 
    public int numFound; 
    public int start; 
    public List<Doc> docs; 
} 

class Doc { 
    public String id; 
} 

我希望這有助於。