2016-09-12 59 views
1

Jq是一個在bash中處理JS文檔的奇妙工具。但是由於Mongodb添加的功能,我不能用它來解析一些MongoDB輸出文檔。的MongoDB的的Json返回 實施例:Jq無法解析MongoDB輸出文檔

{ 
    "_id" : "example", 
    "version" : 23, 
    "members" : [ 
     { 
      "_id" : 0, 
      "host" : "192.168.0.1:27017", 
      "slaveDelay" : NumberLong(0), <---- Here jq failed to parse this line 
      "votes" : 1 
     } 
]} 

通過JQ給出的錯誤是:

parse error: Invalid numeric literal at line 15, column 32 

任何幫助,將不勝感激。

回答

5

我知道我在這裏有點晚,但Mongo shell具有內置的JavaScript支持。所以你可以使用JSON.stringify

對於上述具體的例子,你可以使用下面

mongo --quiet --eval "JSON.stringify(rs.config())"

+1

Woow。很多人爲此感謝。我認爲這是一個比下面給出的解決方法更好的答案。 – jmcollin92

2

,這是造成的,因爲蒙戈使用mongoexport與json選項將允許產生清潔JSON文件後端see this

使用BSON:

"CreatedDate":{"$date":"2016-08-13T01:01:20.833Z"} 

代替:

"CreatedDate" : ISODate("2016-08-13T01:01:20.833Z"), 
+1

謝謝對您的答案,但我需要這個蒙戈shell命令的輸出,而不是在數據導出。例如,我需要解析顯示ReplicatSet配置的「rs.config()」的結果。我想解析的確切數據如下:mongo --eval「rs.config()」 – jmcollin92

+0

請參閱http://stackoverflow.com/questions/32097209/force-mongodb-to-output-strict-json。我遇到了完全相同的問題! – whereswalden

3

一可能足以滿足某些用途的解決方法是轉換mongo shell命令的輸出。我使用此模式解決方法:

mongo --quiet --eval "rs.config()" | sed -e 's/: [a-zA-Z]*(\(.*\))/: "\1"/' | jq '.' 

它刪除':'後的所有函數調用並僅保留該值。

+1

好的解決方法! – profesor79