2017-08-04 140 views
0

我在将JSON转换为Java对象时遇到了一个问题。无法正确地将JSON对象转换为Java对象

我的JSON是如下

{ 
    "_id":{ 
     "$oid":"5981428cf1aa82a313540b76" 
    }, 
    "productId":1, 
    "name":"The Big Lebowski", 
    "currency":{ 
     "currency":"USD", 
     "value":40.5 
    } 
} 

我检索JSON作为DBOBJECT从MongoDB的数据库产品。

DBObject dbObject = productsCollection.findOne(searchQuery); 
if(dbObject != null) 
{ 
    Product product = (Product) AppUtils.fromDBObject(dbObject, Product.class); 
    return Optional.of(product); 
} 

产品是回报

产品的[ProductID = 1,产品名称= NULL,currencyPrice =空]

在AppUtils.java我fromDBObject方法如下:

public static Object fromDBObject(DBObject dbObj, Class<?> clazz) 
{ 
    String json = dbObj.toString(); 
    return new Gson().fromJson(json, clazz); 
} 

我的POJO如下:

public class Product 
{ 
    private long productId; 
    private String productName; 
    private CurrencyPrice currencyPrice; 
    // getter and setter 
} 

public class CurrencyPrice 
{ 
    private double value; 
    private String currency; 
    // getter and setter 
} 

我无法理解它将使用json将DBObject对象转换为Product对象的位置。

谢谢!

+0

那么实际上是['.toJson()'](http://api.mongodb.com/java/current/com/mongodb/ BasicDBObject'上的BasicDBObject.html#toJson--)方法,这当然与'.toString()不同。但实际上你应该直接使用'BasicDBObject',因为它具有与['AbstractMap']相同的接口(http://docs.oracle.com/javase/7/docs/api/java/util/AbstractMap html的?是外部的=真)。不需要强制转换为JSON,然后返回到对象形式。它已经是一个可用的界面,而**不是** JSON。 –

回答

1

试着改变你的POJO属性名在那里匹配

public class Product 
{ 
    private long productId; 
    private String name; 
    private CurrencyPrice currency; 
    // getter and setter 
} 
+0

谢谢是的,我没有遵守正确的变量名称 – user1993412