2016-05-14 4 views
7

ユーザーが入力したテキストが有効なJSONかどうかを確認したいと思います。MongoからJSONを検証しますか?

function IsJsonString(str) { 
    try { 
     JSON.parse(str); 
    } catch (e) { 
     return false; 
    } 
    return true; 
} 

私の問題はObjectIdに包まれモンゴ、ISODateから来ているJSONであり、すなわち:

{ 
    "_id" : ObjectId("5733b42c66beadec3cbcb9a4"), 
    "date" : ISODate("2016-05-11T22:37:32.341Z"), 
    "name" : "KJ" 
} 

これは有効ではありません私は簡単にこのようなものを使用していることを行うことができます知っていますJSON。上記のようなことを許可しながらJSONの検証を行うにはどうすればよいですか?

答えて

2

あなたは裸の機能を置き換えることができますが、https://regex101.com/r/fW7iH4/#javascriptからこの

function IsJsonLikeString(str) { 
    str = str.replace(/(\w+)\("([^"]+)"\)/g, '"$1(\"$2\")"'); 
    try { 
    JSON.parse(str); 
    } ... 

説明のようなもの、文字列で呼び出します。

/(\w+)\("([^"]+)"\)/g 
    1st Capturing group (\w+) 
     \w+ match any word character [a-zA-Z0-9_] 
      Quantifier: + Between one and unlimited times, as many times as possible, giving back as needed [greedy] 
    \(matches the character (literally 
    " matches the characters " literally 
    2nd Capturing group ([^"]+) 
     [^"]+ match a single character not present in the list below 
      Quantifier: + Between one and unlimited times, as many times as possible, giving back as needed [greedy] 
      " a single character in the list " literally (case sensitive) 
    " matches the characters " literally 
    \) matches the character) literally 
    g modifier: global. All matches (don't return on first match) 
+0

それが有効なMongoのクエリであるかどうかを確認するためにMongoDB db.collection.explain()をチェック!私は$ 1(\ "$ 2 \") "''の代わりに "$"($' $ 2 \ ') "''を一重引用符で囲んだので、 ObjectId( "1234") "'の代わりにObjectId( '1234') "を使用して、引用符をエスケープします。 – KJ3

0

あなたが持っているだろう問題はJSONの検証の一つではない、それはですデータベースが実際に入力データを受け入れるかどうかに関係します。構文が正しいかどうかを確認するのは正しい考え方ですが、mongoコレクションを使用してデータを実行し、エラーがないかどうかをチェックする必要があります。

は、これは間違いなく、トリックを行い

関連する問題