2016-05-14 6 views
7

Voglio verificare se il testo inserito da un utente è JSON valido. So che posso facilmente ottenibile usando qualcosa di simile:Convalidare JSON da Mongo?

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

Il mio problema è con JSON che viene da Mongo, che è avvolto in ObjectId, ISODate, vale a dire:

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

Questo non è valido JSON. Come potrei andare sulla convalida di JSON pur consentendo qualcosa come sopra?

risposta

2

si potrebbe sostituire la funzione nuda chiamate con le stringhe, qualcosa di simile

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

spiegazione da https://regex101.com/r/fW7iH4/#javascript:

/(\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

Questo fa sicuramente il trucco! L'unica correzione che ho apportato è stata invece di "" "$ 1 (\" $ 2 \ ")" '", ho messo virgolette singole attorno al $ 2'' "$ 1 (\ '$ 2 \')" ''quindi viene visualizzato come' " ObjectId ('1234') "' invece di '" ObjectId ("1234") "', in cui le virgolette escono da sole. – KJ3

0

La questione si dovrà non è uno di convalida JSON, è in relazione al fatto che il database ACCEPTS effettivamente i dati di input. Hai l'idea giusta per verificare se la sintassi è corretta, ma devi quindi eseguire i dati attraverso la raccolta di mongo e controllare se ci sono errori.

Partenza MongoDB db.collection.explain() per verificare se si tratta di una query valida Mongo