2016-05-14 5 views
7

मैं यह जांचना चाहता हूं कि कोई उपयोगकर्ता प्रवेश करने वाला टेक्स्ट मान्य JSON है या नहीं। मैं जानता हूँ कि मैं आसानी से जो कुछ इस तरह उपयोग कर सकते हैं:मोंगो से जेएसओएन मान्य करें?

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

मेरे समस्या JSON कि मोंगो, जो ObjectId में लपेटा जाता है, ISODate से आता है के साथ है, अर्थात्:

{ 
    "_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

है यह निश्चित रूप से काम कर देता है! मैंने जो एकमात्र समायोजन किया था, वह $ 1 (\ "$ 2 \") "'' के बजाय था, मैंने $ 2' '' $ 1 (\ '$ 2 \') "'' के आसपास एकल उद्धरण दिए हैं, इसलिए यह' ऑब्जेक्टआईडी ('1234') "'ऑब्जेक्टआईडी (" 1234 ")" के बजाय "', जिसमें उद्धरण स्वयं से बचते हैं। – KJ3

0

मुद्दा आप होगा JSON सत्यापन में से एक नहीं है, यह है इससे संबंधित डेटाबेस वास्तव में इनपुट डेटा स्वीकार करता है या नहीं। आपको यह पता लगाने का सही विचार है कि सिंटैक्स सही है या नहीं, लेकिन फिर आपको मोंगो संग्रह के माध्यम से डेटा चलाने और जांचने की आवश्यकता है कि क्या कोई त्रुटि है या नहीं। सत्यापित करने के लिए

बाहर MongoDB db.collection.explain() चेक कि क्या यह एक वैध मोंगो क्वेरी