[英]Why does MongoDB produce invalid JSON? The ObjectId is not quoted, breaks jq parser
我在論壇上進行了搜索,看到許多人遇到類似的問題,但不是這個問題。
我認為我的問題是最簡單的形式,肯定有我缺少的東西,因為沒人問。
我有一個外殼程序腳本,該腳本調用MongoDB腳本並在文件中獲取結果。 然后,我想用jq解析該文件。
jq中斷,因為查詢的輸出無效的JSON。 犯罪者是ObjectId。 關於“ ALL 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', '{', '['
任何幫助,不勝感激。
為您的MyMongoScript.js嘗試以下操作:
db.WorkflowJobs.find().sort({"STATUS":1}).forEach(function(myDoc){myDoc._id=myDoc._id.valueOf();print(tojson(myDoc))});
關鍵是valueOf()
,它將您的ObjectId設置為String。
編輯遺漏了一個家長。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.