7

我搜索了论坛,看到很多人有类似的问题,但不是这个确切的问题。

我认为我的问题是最简单的形式,并且一定有我遗漏的东西,因为没有人问它。

我有一个调用 MongoDB 脚本并在文件中获取结果的 shell 脚本。然后我想用 jq 解析那个文件。

jq 正在中断,因为查询的输出不是有效的 JSON。违规者是 ObjectId。我完全不知道“所有的 JSON ALL THE TIME”是如何产生无效的 JSON 的。

我很确定我缺少一些基本的东西。

我有一个名为 MyMongoScript.js 的文件。它的内容如下所示:

db.WorkflowJobs.find().sort({"STATUS":1}).forEach(printjson)

我使用以下命令调用 MyMongScript.js:

mongo -u $MONGO_U -p $MONGO_P $MONGO_DB -quiet --eval "var DATE_TO_RUN=\"$DATE_TO_RUN\"" MyMongoScript.js  

这是 STDOUT 的结果:

{
"_id" : ObjectId("52816fd50bc9efc3e6d8e33f"),
"WORK_TYPE" : "HIVE",
"Script_Name" : "upload_metrics_LANDING_to_HIST.sql",
"Stop_On_Fail" : true,
"STATUS" : "READY",
"START_TS" : "NULL",
"END_TS" : "NULL",
"DURATION" : "NULL",
"INS_TS" : "Mon Nov 11 2013 16:01:25 GMT-0800 (PST)"
}

以下是 jsonlint.com 对此的评价:

Parse error on line 2:
{    "_id": ObjectId("52816fd50b
------------^
Expecting 'STRING', 'NUMBER', 'NULL', 'TRUE', 'FALSE', '{', '['

非常感谢任何帮助。

4

1 回答 1

5

为你的 MyMongoScript.js 试试这个:

db.WorkflowJobs.find().sort({"STATUS":1}).forEach(function(myDoc){myDoc._id=myDoc._id.valueOf();print(tojson(myDoc))});

关键是valueOf()将您的 ObjectId 设置为字符串。

已编辑遗漏了一个括号。

于 2013-11-12T23:58:56.617 回答