2016-05-14 15 views
7

Tôi muốn kiểm tra xem văn bản mà người dùng nhập có phải là JSON hợp lệ hay không. Tôi biết tôi có thể dễ dàng làm điều đó bằng một cái gì đó như thế này:Xác thực JSON từ Mongo?

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

Vấn đề của tôi là với JSON mà đến từ Mông Cổ, được bọc trong ObjectId, ISODate, ví dụ:

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

Đây không phải là hợp lệ JSON. Làm thế nào tôi có thể đi về xác nhận JSON trong khi cho phép một cái gì đó như trên?

Trả lời

2

bạn có thể thay thế các chức năng thường gọi với chuỗi, một cái gì đó giống như

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

lời giải thích này từ 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

Điều này chắc chắn không phải là lừa! Điều chỉnh duy nhất tôi thực hiện thay vì ''" $ 1 (\ "$ 2 \") "'', tôi đặt dấu nháy đơn quanh $ 2 ''" $ 1 (\' $ 2 \ ') "'' để nó hiển thị dưới dạng '" ObjectId ('1234') "' thay vì '" ObjectId ("1234") "', trong đó dấu ngoặc kép tự thoát. – KJ3

0

Vấn đề bạn sẽ có không phải là một trong những xác nhận JSON, đó là liên quan đến việc liệu cơ sở dữ liệu có thực sự CHẤP NHẬN dữ liệu đầu vào hay không. Bạn đã có ý tưởng đúng để kiểm tra xem cú pháp có chính xác hay không, nhưng sau đó bạn phải chạy dữ liệu thông qua bộ sưu tập mongo và kiểm tra xem có lỗi nào không.

Khám phá MongoDB db.collection.explain() để xác minh xem đó có phải là truy vấn Mongo hợp lệ

Các vấn đề liên quan