Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/327.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 将Json解析为DBObject_Java_Json_Mongodb - Fatal编程技术网

Java 将Json解析为DBObject

Java 将Json解析为DBObject,java,json,mongodb,Java,Json,Mongodb,我有一个使用“test/plain”的REST服务,基本上我收到的字符串是JSON字符串,我有下面的代码将JSON字符串解析到DBObject,这样我就可以将它保存到MongoDB @Timed @POST @Consumes("text/plain") @Produces(MediaType.APPLICATION_JSON) public Response insertscreenview(String message) { // System.out.println(message

我有一个使用“test/plain”的
REST
服务,基本上我收到的字符串是
JSON
字符串,我有下面的代码将
JSON
字符串解析到
DBObject
,这样我就可以将它保存到
MongoDB

@Timed
@POST
@Consumes("text/plain")
@Produces(MediaType.APPLICATION_JSON)
public Response insertscreenview(String message) {
    // System.out.println(message);
    final Logger logger = LoggerFactory.getLogger(ScreenviewResource.class);
    logger.info("Screenview Insert Request Recieved" + "\n" + message);
    screenviewInstance = new Screenview();
    tracInfoInstance = new TracInfo();
    BasicDBObject ageRangeId;
    GeoCheckManager geoCheckInstance = new GeoCheckManager();
    boolean brCheck;        
    try {
        ObjectMapper mapper = new ObjectMapper();
        JsonNode actualObj = mapper.readTree(message);

        System.out.println(message);

        DBObject objInstance = (DBObject)JSON.parse(message);
 ...}
我的
JSON
字符串外观如下

{
"Screenview": {
    "TracInfo": null,
    "Id": 0,
    "ScreenName": "SettingsActivity",
    "Timestamp": "2014-07-02T18:50:10",
    "Timezone": "Asia/Kolkata",
    "ApplicationId": null,
    "DeviceId": null,
    "UserId": null,
    "SessionId": "5684ae84-9a48-49a5-ab47-fcb7de3c08cf"
},
"Session": {
    "Id": "5684ae84-9a48-49a5-ab47-fcb7de3c08cf",
    "StartTime": "2014-07-02T13:20:58",
    "EndTime": "2014-07-02T13:21:09",
    "EntryScreen": "AccessPointActivity",
    "ExitScreen": "SettingsActivity",
    "FirstEvent": "SCREEN STARTED",
    "LastEvent": "SCREEN STOPPED",
    "ApplicationId": "fa41f204bfc711e3b9f9c8cbb8c502c4",
    "DeviceId": "0_6e505bcbe7e511e393b60aba4a7caa0b",
    "UserId": "",
    "TracInfoId": -1,
    "SensorsInfo": null
},
"CustomParams": {
    "Latitude": 0,
    "Longitude": 0,
    "Country": null,
    "CountryCode": null,
    "Region": null,
    "RegionCode": null,
    "City": null,
    "Gender": null,
    "Age": 0,
    "Platform": "Android",
    "OSVersion": "16",
    "Manufacturer": "samsung",
    "Resolution": "600 * 976",
    "NetworkCarrier": null,
    "Timezone": null
} }
它给了我如下错误,我无法找到原因

java.lang.ClassCastException:java.util.HashMap无法强制转换为 com.mongodb.DBObject


不使用
DBObject
,您可以使用
BasicDBObject
,它有一个以Map作为输入的构造函数:

BasicDBObject obj=newbasicdbobject(JSON.parse(message))

或使用ObjectMapper:


BasicDBObject obj=mapper.readValue(消息,BasicDBObject.class)

将字符串解析为DBObject的最新方法:

BasicDBObject dbObject = com.mongodb.BasicDBObject.parse(rawJsonString)

请注意,这可能只用于免费模式json对象,大多数情况下,可以使用Springs MongoDBTemplate/MongoRepository等来处理映射。

对于初学者,如果json是您的输入,您应该使用“application/json”。在没有考虑MIME类型的情况下,人们总是错误地休息。但即使JSON是您唯一可以接受的输入,也至少要正确处理这一部分。附言:我们需要代码或对正在进行解析的部分的引用。一个好的实现会因为我刚才所说的而失败。@NeilLunn我添加了代码猜测,这不是
JSON.parse的
com.mongodb.util
实现。请确保导入的是哪个。我想可能就是这个。IDE中有好几次类似这样的内容。
com.mongodb.util.JSON.parse(String)
返回一个对象,而不是一个映射。如果它不是装箱的基元值,则可以安全地将其强制转换为DBObject。