2013-02-08 152 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; 
} 

我希望这有助于。