如何在Javascript中处理ObjectId,无法解析它

时间:2014-08-05 08:07:14

标签: c# javascript asp.net json mongodb

当我从ASP.NET Web服务返回到客户端时,我遇到了一个问题。返回的JSON包含在MongoDB数据库中生成的ObjectId,我需要在客户端中使用它。

运行

时问题开始了
 var res = jQuery.parseJSON(data.d)[0]; // array of companies

我收到错误:

Uncaught SyntaxError: Unexpected token O 

我假设Javascipt JSON解析器不识别ObjectId

在我的.NET C#代码中,我将seralized并返回JSON:

 var jsonWriterSettings = new JsonWriterSettings { OutputMode = JsonOutputMode.Strict };
return results.ToJson(jsonWriterSettings);

来自webservice的返回JSON字符串:

[{ "companies" : [{ "id" : ObjectId("53e129ed0000000000000000"), "name" :
 "Company 1" }, { "id" : ObjectId("53e12a290000000000000000"), "name" :
 "Company 2" }, { "id" : ObjectId("53e12a650000000000000000"), "name" :
 "Company 3" }] }]"

如何在Javascript中使用ObjectId。我确实需要一些HTML元素中的ObjectId字符串(例如下拉列表值)?

更新:我发现了BSON seralizer here。但是,我不知道这是否是合适的解决方案。

3 个答案:

答案 0 :(得分:2)

我通常不建议向用户公开ObjectId,因为24位十六进制字符串不是非常用户友好。但是当你仍然想要这样做时,你应该能够使用toString方法将其转换为字符串。

您发布的JSON示例代码不是有效的JSON,因此在客户端解析失败并不奇迹。这意味着您需要找到一个不同的工具(或者您可能没有正确使用它)来生成您的JSON或在转换之前将ObjectId转换为字符串。

答案 1 :(得分:0)

您需要更改您的网络服务,以便它返回:

[{ "companies" : [{ "id" : "53e129ed0000000000000000", "name" :
 "Company 1" }, { "id" : "53e12a290000000000000000", "name" :
 "Company 2" }, { "id" : "53e12a650000000000000000", "name" :
 "Company 3" }] }]"

否则它是无效的JSON

答案 2 :(得分:-1)

var userid=results[i].id;

获取objectId值