验证来自 Mongo 的 JSON?
Posted
技术标签:
【中文标题】验证来自 Mongo 的 JSON?【英文标题】:Validate JSON from Mongo? 【发布时间】:2016-09-10 20:20:46 【问题描述】:我想检查用户输入的文本是否是有效的 JSON。我知道我可以使用这样的方法轻松做到这一点:
function IsJsonString(str)
try
JSON.parse(str);
catch (e)
return false;
return true;
我的问题是来自 Mongo 的 JSON,它包含在 ObjectId
、ISODate
中,即:
"_id" : ObjectId("5733b42c66beadec3cbcb9a4"),
"date" : ISODate("2016-05-11T22:37:32.341Z"),
"name" : "KJ"
这不是有效的 JSON。在允许上述内容的同时如何验证 JSON?
【问题讨论】:
【参考方案1】:你可以用字符串替换裸函数调用,像这样
function IsJsonLikeString(str)
str = str.replace(/(\w+)\("([^"]+)"\)/g, '"$1(\"$2\")"');
try
JSON.parse(str);
...
来自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)
【讨论】:
这绝对可以解决问题!我所做的唯一调整是而不是'"$1(\"$2\")"'
,我在 $2 '"$1(\'$2\')"'
周围加上了单引号,因此它显示为 "ObjectId('1234')"
而不是 "ObjectId("1234")"
,其中引号会自行转义。【参考方案2】:
您遇到的问题不是 JSON 验证,而是与数据库是否实际接受输入数据有关。您有正确的想法来检查语法是否正确,但是您必须通过 mongo 集合运行数据并检查是否有任何错误。
查看 MongoDB db.collection.explain() 以验证它是否是有效的 Mongo 查询
【讨论】:
以上是关于验证来自 Mongo 的 JSON?的主要内容,如果未能解决你的问题,请参考以下文章
在 mongo、node、passport 和 heroku 上对用户进行身份验证。几天后停止工作
无法使用 c# 根据来自 json 的 json 元素属性值验证数据条件