簡體   English   中英

為什么MongoDB會產生無效的JSON? 不引用ObjectId,中斷jq解析器

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM