2012-10-13 49 views
2

我有來自mongodb的以下響應,我無法找到將它刪除的方法。

無法從mongodb解析json格式的文檔列表

[{ "_id" : { "$oid" : "some ids"} , 
    "index" : 0 , 
    "question" : "some text ?", 
    "optiona" : "OS", 
    "optionb" : "JAVA", 
    "optionc" : "C", 
    "optiond" : "C#", 
    "answer" : "JAVA", 
    "created_at" : { "$date" : "2012-09-20T06:37:04.306Z" }, 
    "Active" : "1" 
}, 
{ "_id" : { "$oid" : "505ab997aded66f4c1ccc7f3" }, 
    "index" : 1 , 
    ..../objects like that 
}] 

更具體地說,我無法找到一個方法來解析$ date元素和$ OID。怎麼做我寫對應於該元素的數據成員或做我必須寫一個內部類?它可能看起來很基本的問題,但我找不到方法。我將使用該類在gson解析來分析。謝謝

+0

我有點困惑通過你的問題 - 你是否試圖訪問Java程序中的oid或日期字段?哪一步你有麻煩? _id字段被設置爲嵌入式文檔{「$ oid」:「some ids」},它本身就是一個BSON對象,因此要獲取$ oid字段的內容,您可以調用以下內容:document.get( 「_id」).get(「$ oid」)。這是你問的嗎? – Louisa

+0

我明白你在說什麼,但是我在Android上使用這個代碼,並且在這個平臺上我們沒有mongodb庫。所以我們必須使用json解析來從JSON對象中獲取信息。我使用的是Gson,它需要一個映射類來獲取對象,而我有問題才能獲得BSON對象_oid和$ date。 – Ranger

回答

0

在toString中,$ date和$ oid是人爲字段。如果您使用標準的java mongo驅動程序,那麼get(「created_at」)應該是java.util.Date實例,而get(「_ id」)應該是org.bson.types.ObjectId實例。

我對你的問題有點困惑,所以如果你是在使用原始BSON對象,那麼「created_at」將是一個BSON日期類型(0x09),其有效載荷是一個long代表millis自Unix紀元。 「_id」將是一個BSON ObjectId類型(0x07),其id爲12個字節的有效負載。如果我沒有記錯,它與Java所期望的相反。有關更多詳細信息,請參見BSON Spec

0

我想我已經想出瞭解決方案,部分我從this上心,爲測繪類,我不得不使用註釋與_idcreated_at。另外我必須爲每個_id和created_at創建靜態內部類。代碼如下所示,這是現在的工作,但我認爲這是更好的解決方案在那裏,所以我保留了這個問題開放,如果有人有更好的解決方案人會在一段時間後關閉

  import com.google.gson.annotations.SerializedName; 
      import java.sql.Date; 



     public class QuizDBObject { 

/** 
* this class will work as the place holder for the quiz object. 
* An extra variable is added to store answer given by user. 
*/ 
@SerializedName("_id") 
Id _id; 



public Id get_id() { 
    return _id; 
} 
public void set_id(Id _id) { 
    this._id = _id; 
} 
@SerializedName("index") 

private long index ; 
@SerializedName("question") 

private String question; 
@SerializedName("answer") 

private String answer; 
@SerializedName("optiona") 

private String optiona; 
@SerializedName("optionb") 

private String optionb; 
@SerializedName("optionc") 

private String optionc; 
@SerializedName("optiond") 

private String optiond; 
@SerializedName("created_at") 
MyDate created_at; 

    public MyDate getCreated_at() { 
    return created_at; 
} 
public void setCreated_at(MyDate created_at) { 
    this.created_at = created_at; 
} 

public void setOptiona(String optiona) { 
    this.optiona = optiona; 
} 
@SerializedName("Active") 
private String Active; 
/** 
* for storing the answer given by the user for every question. 
*/ 
private String userAnswer; 



public String getUserAnswer() { 
    return userAnswer; 
} 
public void setUserAnswer(String userAnswer) { 
    this.userAnswer = userAnswer; 
} 
public QuizDBObject(){ 
    super(); 
} 

public long getIndex() { 
    return index; 
} 
public void setIndex(long index) { 
    this.index = index; 
} 
public String getQuestion() { 
    return question; 
} 
public void setQuestion(String question) { 
    this.question = question; 
} 
public String getAnswer() { 
    return answer; 
} 
public void setAnswer(String answer) { 
    this.answer = answer; 
} 
public String getOptiona() { 
    return optiona; 
} 
public void setOptionA(String optiona) { 
    this.optiona = optiona; 
} 
public String getOptionb() { 
    return optionb; 
} 
public void setOptionb(String optionb) { 
    this.optionb = optionb; 
} 
public String getOptionc() { 
    return optionc; 
} 
public void setOptionc(String optionc) { 
    this.optionc = optionc; 
} 
public String getOptiond() { 
    return optiond; 
} 
public void setOptiond(String optiond) { 
    this.optiond = optiond; 
} 

public String getActive() { 
    return Active; 
} 
public void setActive(String Active) { 
    this.Active = Active; 
} 
/*public void setCreatedAtString(String type) { 
    this.created_at.parse(type); 

} 
*/ 

static class Id{ 
    String $id; 

    public String get$id() { 
     return $id; 
    } 

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

} 
static class MyDate{ 
    String $date; 

    public String get$date() { 
     return $date; 
    } 

    public void set$date(String $date) { 
     this.$date = $date; 
    } 
} 

    }