gpt4 book ai didi

javascript - 如何从包含 ISODate 的 BSON 字符串创建 JSON 对象

转载 作者:行者123 更新时间:2023-11-30 06:34:01 29 4
gpt4 key购买 nike

我正在尝试从包含 ISODate 的字符串创建一个 JSON 对象。

var teststring = '{ "_id" : "test001", "CreatedDate" : ISODate("2013-04-02T10:37:21.529Z") }';
console.log(JSON.parse(teststring));

获取错误:

undefined:1
{ "_id" : "test001", "CreatedDate" : ISODate("2013-04-02T10:37:21.529Z") }
^

最佳答案

扩展@user1896296 的回答

var valid = teststring.replace("ISODate(", "").replace(")", "");

不是很健壮,不应该用于生产有值(value)的代码。使用正则表达式进行替换。

var isoRegex = /ISODate\((".+?")\)/g;
teststring = teststring.replace(isoRegex, function (match, parenGroup) {
return parenGroup;
});
var parsedObj = JSON.parse(teststring);

即使在这种情况下也能正常工作:

{
"_id" : "test001",
"RandomUserInput" : "Sometimes I like to say ISODate(\"2013-04-02T10:37:21.529Z\") in the body of my replies!",
"CreatedDate" : ISODate("2013-04-02T10:37:21.529Z")
}

由于必须对用户输入中的任何双引号进行转义,因此正则表达式不可能匹配用户提供的输入。

此外,如果您真的想将这些字段解析为日期对象,您可以像这样编写一个辅助函数:

var isoRegex = /"([^"]+?)"\s*:\s*ISODate\((".+?")\)/g;
function parseBson (bson) {
var dateProps = [];
bson = bson.replace(isoRegex, function (match, propName, dateStr) {
dateProps.push(propName);
return '"' + propName + '" : ' + dateStr;
});

var obj = JSON.parse(bson);

for (var i in dateProps)
obj[dateProps[i]] = new Date(obj[dateProps[i]]);

return obj;
}

var parsedObj = parseBson(teststring);

请注意,此功能仅适用于顶级属性。尝试自动转换嵌套属性会变得棘手。

关于javascript - 如何从包含 ISODate 的 BSON 字符串创建 JSON 对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15762908/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com