0

这个问题与 Java API / 驱动程序有关,但也可能与其他语言的 Mongo 接口有关。我是 Mongo 的新手并且做了一些假设,所以如果我弄错了,请纠正我。我找到了很多文档,参考资料描述了在给定如下结构的情况下创建 DBObject:

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

假设上述对象存在(未更改)在名为foo.json. 现在,据我了解,上面的内容是一个 JavaScript对象文字(不是有效的 JSON)。正确的?但是,这是在 Mongo 文档中称为“JSON”的表单。

无论如何,在我的测试中,我将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会抛出 a 。不应该支持所有 3 种形式吗?

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

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

4

2 回答 2

2

JSON.parse不是一个成熟的 JSON 解析器,它不支持这样的转义字符。如果你想操作 JSON 和对象,你最好使用像MongoJack这样的东西,它从一开始就是这样设计的。

于 2014-04-29T16:19:05.920 回答
0

严格来说,在 JSON 中所有字符串都应该用双引号引起来 - 请参阅json 规范

因此,有效的 json 文档版本将是:

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

大多数 JSON 解析器处理某种程度的损坏(ish)json,但如果你坚持规范,它应该可以正常工作。

于 2014-04-30T07:59:16.623 回答