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 シェルでは、二重引用符で格納されているように見えます。それが機能するので、エスケープされた単一引用符を使用して JavaScript オブジェクトフォームを処理できるという別の仮定を立てています。

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

ただし、このオブジェクトを ( を使用してcom.mongodb.util.JSON.parse(fooString)) 解析しようとすると、 acom.mongodb.util.JSONParseExceptionがスローされます。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 パーサーは、ある程度の壊れた (っぽい) json を処理しますが、仕様に固執すれば問題なく動作するはずです。

于 2014-04-30T07:59:16.623 に答える