这个问题与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。
提前感谢您提供任何/所有帮助。
答案 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但是如果你坚持使用它就可以正常工作。