使用转义字符从单引号JS对象构造Mongo DBObject?

时间:2014-03-13 14:14:11

标签: java mongodb dbobject

这个问题与Java API / Driver有关,但也可能与Mongo在其他语言中的接口有关。我是Mongo的新手并且做了一些假设,所以如果我弄错了,请纠正我。我发现了很多文档,而references描述了在给定这样的结构的情况下创建DBObject:

{
    foo: "bar",
    baz: {
        x : { lorem: "Ipsum" },
        y: { dolor : "sit amet" }
    }
}

假设上述对象在名为foo.json的文件中存在(未更改)。现在,据我所知,上面的内容是一个JavaScript 对象文字(不是有效的JSON)。对?但是,这是引用为" JSON"在Mongo文档中。

无论如何,在我的测试中,我将foo.json文件读入一个字符串并使用(我相信)一个相当标准的约定来解析它:

String fooString = readFile("foo.json");
Object o = com.mongodb.util.JSON.parse(fooString);
DBObject dbObj = (DBObject) o;

这很好用。现在,由于foo.json不是有效的JSON,我假设我能够使用类似的JavaScript对象形式:

{
    foo: 'bar',
    baz: {
        x : { lorem: 'Ipsum' },
        y: { dolor : 'sit amet' }
    }
}

好的,好的,这似乎有效。虽然,在Mongo shell中奇怪的是它似乎存储了双引号。由于这是有效的,我做了另一个假设,即我能够使用转义单引号来处理JavaScript对象表单:

{
    foo: 'bar',
    baz: {
        x : { lorem: 'Ipsum.  Isn\'t working' },
        y: { dolor : 'sit amet' }
    }
}

但是,当我尝试解析此对象时(使用com.mongodb.util.JSON.parse(fooString)),会抛出com.mongodb.util.JSONParseException。不应该支持所有3种形式吗?

注意:我使用的是org.mongodb:mongo-java-driver:mongo-java-driver:2.11.2。

提前感谢您提供任何/所有帮助。

2 个答案:

答案 0 :(得分:2)

JSON.parse不是一个成熟的JSON解析器,它也不支持这样的转义字符。如果你想操纵JSON和对象,你最好使用像MongoJack之类的东西,它是从一开始就按照这种方式工作的。

答案 1 :(得分:0)

严格来说,在JSON中所有字符串都应加双引号 - 请参阅json spec

所以有效的json文档版本是:

{
    "foo": "bar",
    "baz": {
        "x": { "lorem": "Ipsum" },
        "y": { "dolor" : "sit amet" }
    }
}

大多数JSON解析器处理某些级别的破坏(ish)json但是如果你坚持使用它就可以正常工作。