这是我的JSON示例:
{
"open":true,
"total_products":100,
"product":[
{
"p_id":1,
"price":"5.00",
"name":"blah one"
},
{
"p_id":2,
"price":"15.00",
"name":"blah two"
},
...
]
}
这是我的POJO类:
@Entity(nameInDb = "products")
public class ProductsPOJO {
@SerializedName("open")
@Property(nameInDb = "open")
private boolean open;
@SerializedName("total_products")
@Property(nameInDb = "total_products")
private Long total_products;
@Convert(converter = ProductConverter.class, columnType = String.class)
@SerializedName("product")
@Property(nameInDb = "product")
private Product product;
public static class productConverter implements PropertyConverter<Product, String> {
//What shoudl I write in convert part?!
@Override
public Product convertToEntityProperty(String databaseValue) {
if (databaseValue == null) {
return null;
}
for (Product p : Product.values()) {
if (p.id == databaseValue) {
return p;
}
}
return Product.DEFAULT;
}
@Override
public String convertToDatabaseValue(Product entityProperty) {
return entityProperty == null ? null : entityProperty.;
}
//
/*@Override
public Product convertToEntityProperty(String databaseValue) {
return Product.valueOf(databaseValue);
}
@Override
public String convertToDatabaseValue(Product entityProperty) {
return entityProperty.name();
}*/
}
public static class Product{
@Id
@SerializedName("p_id")
private Long p_id;
@SerializedName("price")
@Property(nameInDb = "price")
private String price;
@SerializedName("name")
@Property(nameInDb = "name")
private String name;
//Getters & Setters
}
public Product getProduct() {
return product;
}
public void setProduct(Product data) {
this.product = product;
}
//open & total_products Getters & Setters
}
但是我不知道我应该为< code>productConverter写些什么。< br >另一方面,< code>Product类中的字段有多种类型。< code >字符串和< code >整数。< br >我看了这些:https://github . com/green robot/green Dao/blob/v 3 . 1 . 1/examples/Dao example/src/main/Java/org/green robot/green Dao/example/note . Java # L26-L27
http://greenrobot.org/greendao/documentation/custom-types/
那是因为
" GSON需要BEGIN_ARRAY,但却是BEGIN_OBJECT "
应该这样做:
JsonParser parser = new JsonParser();
JsonObject rootObject = parser.parse(JSON_STRING).getAsJsonObject();
//You can get the "open" and "total_products" here too.//
JsonElement productElement = rootObject.get("product");
Gson gson = new Gson();
List<Product> productList = new ArrayList<>();
//Check if "data" element is an array or an object and parse accordingly...
if (productElement.isJsonObject()) {
//The returned list has only 1 element
Product p = gson.fromJson(productElement, Product.class);
productList.add(p);
}
else if (productElement.isJsonArray()) {
//The returned list has >1 elements
Type productListType = new TypeToken<List<Product>>() {}.getType();
productList = gson.fromJson(productElement, productListType);
}
[ 来源: https://stackoverflow.com/a/16656096/421467 ]
编辑: :/我在这里还混合了两件事,greenrobot objectbox和greendao...很抱歉,但答案保持不变,只需将对象框替换为绿道:)
在我看来,你在这里把一些东西与GSON和ObjectBox(绿道)混淆了
你的Json看起来像一个服务器响应。但是在你的数据库中,你通常只想保存产品实体,而不是答案。所以最好用一个ServerResultPOJO用GSON来解析你的答案(下面的代码没有经过测试,可能会有一些小错误,只是为了让你走上正确的道路)。
public class ServerResultPOJO {
@SerializedName("open")
private boolean open;
@SerializedName("total_products")
private Long total_products;
@SerializedName("product")
private List<Product> products;
}
然后,您的Prdouct类可能是一个ObjectBox(Green道)实体
@Entity
public static class Product{
@Id
private long id;
@Index
@SerializedName("p_id")
private Long p_id;
@SerializedName("price")
@Property(nameInDb = "price")
private String price;
@SerializedName("name")
@Property(nameInDb = "name")
private String name;
//Getters & Setters
}
[id最好不要将服务器ID用作数据库实体ID。单独保存id和服务器ID。自动递增和其他东西不会混淆]
你不需要任何转换器,只需要一些方法将你的答案中的所有产品放入数据库——在放入一个新的实体之前,你可以搜索p_id来检查你是否需要在放入之前同步到数据库。
所以首先解析您的答案,然后执行数据库操作。
如果您真的希望响应作为数据库实体,则需要一对多关系。但是,您不能将相同的类用于实体和GSON解析,或者使用@transient字段,使事情更加复杂。
假设我有一个Person模型(Java类和数据库表),它有列/字段,如姓名,年龄,性别,身高,体重。 现在有2种可能 1) 我需要整列数据。。因此,我将命名查询为; @NamedQuery(name=“Person.findAll”,query=“从Person WHERE中选择p…” 2)我只需要特定的列数据...所以我将命名查询为; @NamedQuery(name=“Person.findS
自定义注释 自定义注释处理程序 超级类 子类 Subclass调用SuperClass方法但在不调用 当我将移动到子类method时,AspectHandler可以获取 如何在超类保护方法中使用自定义注释? 更改 但还是不行 所以我把我的< code >子DAO改成了under code 这不是完美的解决方案,但它的工作原理 情况1:从子类方法调用超类方法不起作用 情况 2:使超级类实例和从实例调
我使用以下插件从WordPress REST API获取JSON数据: 高级自定义字段PRO(5.3.7) WP REST API(2.0-beta13) ACF到REST API(2.2.0) 自定义文章类型UI(1.3.4) 我有一个自定义的帖子类型“案例研究”,是用自定义的帖子类型UI插件创建的。我有一个名为“案例研究”的自定义字段组(通过ACF),它仅在文章类型为案例研究时应用。 我还有一
我正在做表A和表B的左连接,并试图将结果提取到自定义POJO中,该POJO具有表A和表B中的字段,如下所示: 它适用于除myCode字段之外的所有字段,myCode字段是连接这两个表的字段。对我来说,myCode的值是从正确的表B中获取的,表A中的所有记录在表B中都没有相应的条目。我想知道jooQ如何决定映射到POJO的字段,以及是否在任何地方记录了这种行为。 我的目标是将表A和表B中的所有字段提
Rust 自定义数据类型主要是通过下面这两个关键字来创建: struct: 定义一个结构体 enum: 定义一个枚举类型 而常量的创建可以通过 const 和 static 关键字来创建。