2016-04-14 40 views
0

搜索索引的查詢使用JSON文件輸出我跟着樣品類動物在https://github.com/cloudant/java-cloudant/blob/88202a1bd7b9b04d96c4b7b8498a1b8f7f99c9e5/src/test/java/com/cloudant/tests/Animal.java如何建立一流的管理cloudant

我成功地管理搜索索引查詢這個類。我想,我有JSON格式的文檔在cloudant爲:

{ 
    "_id": "web", 
    "_rev": "11-b1d0e315272a87c2549df4004d836049", 
    "min_weight": 40, 
    "max_weight": 65, 
    "min_length": 1, 
    "max_length": 2.2, 
    "attributeCollection": { 
    "attributeArray": [ 
     { 
     "updateable": false, 
     "lookup": "issuetype", 
     "issueAttributeDefinitionId": 13, 
     "attributeType": 1, 
     "name": "web issue", 
     "value": [ 
      "Improper Neutralization of Input During Web Page Generation" 
     ] 
     } 
    ] 
    }, 
} 

我的問題是如何建立一個Java類來管理此文檔的搜索索引輸出。特別是,如何管理設置的屬性根據您過去的幾年堆棧溢出帖「attributeCollection」,「attributeArray」 ......「名稱」,「值」

+0

您與列出的字段創建一個屬性類。在你的Animal類中,你將擁有一個Attribute對象列表。 –

+0

@吉爾伯特我做到了,但它的工作。它可以解決「_id」,「_rev」,「min_weght」,但它顯示「attributeCollection」等錯誤。 –

+0

我不明白。您的JSON解析器**是否自動**創建Java對象,或者您在將JSON解析器的輸出映射到您手動創建的Java對象**時遇到問題**? –

回答

2

的,我認爲你有兩個選擇:

1)如果你定義issue類正如你在以前的帖子確實可以執行不同的Java中搜索到剛剛返回這些領域中的問題類,如下所示:

SearchResult<issue> issues=db.search("attributes/by_name_value") 
    .limit(10).includeDocs(false) 
    .querySearchResult("name:\"web*\"", issue.class); 

for (int i = 0; i < issues.getRows().size(); i++) { 
    SearchResult<issue>.SearchResultRow row = issues.getRows().get(i); 
    System.out.println(row.getId()); 
    System.out.println(row.getFields().getName());    
    System.out.println(row.getFields().getValue()); 
} 

注:該電話querySearchResult而不是queryinclude_docs是錯誤的。

2)如果您需要返回整個文檔,那麼您需要創建與您的JSON匹配的類。你的類應該是這個樣子:

Issue2

public class Issue2 { 

    private String id; 
    private Integer min_weight; 
    // TODO: other fields 
    private AttributeCollection attributeCollection; 

    public Issue2() { 
    } 

    public String getId() { 
     return id; 
    } 

    public void setId(String id) { 
     this.id = id; 
    } 

    public Integer getMin_weight() { 
     return min_weight; 
    } 

    public void setMin_weight(Integer min_weight) { 
     this.min_weight = min_weight; 
    } 

    public AttributeCollection getAttributeCollection() { 
     return attributeCollection; 
    } 

    public void setAttributeCollection(AttributeCollection attributeCollection) { 
     this.attributeCollection = attributeCollection; 
    } 

}

AttributeCollection

public class AttributeCollection { 

    private Attribute[] attributeArray; 

    public Attribute[] getAttributeArray() { 
     return attributeArray; 
    } 

    public void setAttributeArray(Attribute[] attributeArray) { 
     this.attributeArray = attributeArray; 
    } 
} 

屬性

public class Attribute { 

    private String name; 
    private String value[]; 
    // TODO: other fields 

    public String getName() { 
     return name; 
    } 

    public void setName(String name) { 
     this.name = name; 
    } 

    public String[] getValue() { 
     return value; 
    } 

    public void setValue(String[] value) { 
     this.value = value; 
    } 
} 

然後你可以使用以前的搜索調用(與Issue2類):

List<Issue2> issues=db.search("attributes/by_name_value") 
    .limit(10).includeDocs(true) 
    .query("name:\"web*\"", Issue2.class); 

for (int i = 0; i < issues.size(); i++) { 
    Issue2 row = issues.get(i); 
    System.out.println("min_weight = " + row.getMin_weight()); 
    if (row.getAttributeCollection() != null && row.getAttributeCollection().getAttributeArray() != null) { 
     for (int j=0; j<row.getAttributeCollection().getAttributeArray().length; j++) { 
      String name = row.getAttributeCollection().getAttributeArray()[i].getName(); 
      String[] values = row.getAttributeCollection().getAttributeArray()[i].getValue(); 
      System.out.println(name); 
      if (values != null) { 
       for(String value: values) { 
        System.out.println(value); 
       } 
      } 
     } 
    } 
} 
+0

太棒了!謝謝。我仍然想問你「搜索查詢索引的輸出是不是JSON的權利?」 –

+0

Cloudant的輸出是JSON,但是java驅動程序會將該JSON轉換爲Java類的實例。這就是爲什麼你的Java類必須匹配你的JSON結構。 – markwatsonatx

+0

我添加了min_weight作爲如何添加其他字段的示例。 – markwatsonatx