Java 无法从mongodb解析json格式的文档列表
我有以下来自mongodb的回复,我找不到一种方法来取消搜索Java 无法从mongodb解析json格式的文档列表,java,mongodb,gson,Java,Mongodb,Gson,我有以下来自mongodb的回复,我找不到一种方法来取消搜索 更具体地说,我找不到解析$date元素和$oid的方法。我该如何编写与该元素对应的数据成员,还是必须编写内部类?这似乎是一个非常基本的问题,但我找不到方法。我将在gson parse中使用该类进行解析。谢谢,在toString中,$date和$oid是人工字段。如果您使用的是标准java mongo驱动程序,那么getcreated_at应该是java.util.Date实例,get_id应该是org.bson.types.Objec
更具体地说,我找不到解析$date元素和$oid的方法。我该如何编写与该元素对应的数据成员,还是必须编写内部类?这似乎是一个非常基本的问题,但我找不到方法。我将在gson parse中使用该类进行解析。谢谢,在toString中,$date和$oid是人工字段。如果您使用的是标准java mongo驱动程序,那么getcreated_at应该是java.util.Date实例,get_id应该是org.bson.types.ObjectId实例
我对你的问题有点困惑,因此如果你使用的是原始的BSON对象,那么创建的将是一个BSON日期类型0x09,它的有效负载是一个自Unix时代以来表示毫秒的长值。_id将是一个BSON ObjectId类型0x07,id的有效负载为12个字节。如果我没有记错的话,它的endian与Java所期望的相反。有关更多详细信息,请参阅。在toString中,$date和$oid是人工字段。如果您使用的是标准java mongo驱动程序,那么getcreated_at应该是java.util.Date实例,get_id应该是org.bson.types.ObjectId实例
我对你的问题有点困惑,因此如果你使用的是原始的BSON对象,那么创建的将是一个BSON日期类型0x09,它的有效负载是一个自Unix时代以来表示毫秒的长值。_id将是一个BSON ObjectId类型0x07,id的有效负载为12个字节。如果我没有记错的话,它的endian与Java所期望的相反。有关更多详细信息,请参见。我想我已经想出了解决方案,部分原因是我从mapping类中获得了这个想法,因此我不得不使用带有_id的注释,并在创建时创建。此外,我还必须为每个_id创建静态内部类,并在上创建_。下面给出了代码,它现在正在工作,但我认为有更优雅的解决方案,所以我保留这个问题,如果有人有更好的解决方案,其他人将在一段时间内关闭
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;
}
}
}
我想我已经想出了解决方案,部分是我从mapping类中得到的想法,对于mapping类,我必须使用带有_id的注释并在创建时创建。此外,我还必须为每个_id创建静态内部类,并在上创建_。下面给出了代码,它现在正在工作,但我认为有更优雅的解决方案,所以我保留这个问题,如果有人有更好的解决方案,其他人将在一段时间内关闭
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;
}
}
}
我有点被你的问题弄糊涂了——你是想访问Java程序中的oid或date字段吗?您在哪一步上遇到问题?_id字段被设置为{$oid:some id}的嵌入文档,它本身只是一个BSON对象,因此要获取$oid字段的内容,可以调用以下命令:document.get _id.get$oid。这就是你要问的吗?我明白你想说什么,但我在Android上使用这段代码,对于这个平台,我们没有mongodb库。因此,我们必须使用json解析从json对象中获取信息。我正在使用Gson,它需要一个映射类来获取对象,而我在获取BSON对象_oid和$date时遇到了问题。我对您的问题有点困惑-您是否试图访问Java程序中的oid或date字段?您在哪一步上遇到问题?_id字段被设置为{$oid:some id}的嵌入文档,它本身只是一个BSON对象,因此要获取$oid字段的内容,可以调用以下命令:document.get _id.get$oid。这就是你要问的吗?我明白你想说什么,但我在Android上使用这段代码,对于这个平台,我们没有mongodb库。因此,我们必须使用json解析从json对象中获取信息。我正在使用Gson,它需要一个映射类来获取对象,而我在获取BSON对象_oid和$date时遇到了问题。