我在文本中有一个嵌套json的模板。
模板看起来像
Yii::$app->user->identity->customer->id
我希望,条件是将模板读入python变量,然后根据需要更改一些字段(即$ cat file.txt
{ "sensor" : {
"type": "unknown",
"notifications": "off"
"timeout": "0"
"featureset": {
"features": [
{
"name": "Temp",
"enabled": "No",
},
{
"name": "Humidity",
"enabled": "No",
} ] }
}
}
)。然后将其保存到mongodb数据库中。
我的代码如下:
"notifications": "on"
这不起作用。我得到dbclient = MongoClient()
db = dbclient.sensors
def main():
with open ("file.txt", 'r') as template:
data = template.read()
print ('data: %s' % data)
dbdata = db.testdata
post_id = dbdata.insert_one(bson.BSON.encode(data.strip("\r\n")))
print ('Inserted post id %s ' % post_id)
if __name__ == "__main__":
main()
如何将从文本文件中读取的此字符串转换为适合mongodb的格式?
谢谢
答案 0 :(得分:0)
更新文件有效的JSON数据。这意味着JSON数组中的最后一项或JSON对象中的最后一对没有终端逗号。
{
"sensor": {
"type": "unknown",
"notifications": "off",
"timeout": "0",
"featureset": {
"features": [
{
"name": "Temp",
"enabled": "No"
},
{
"name": "Humidity",
"enabled": "No"
}
]
}
}
}
接下来请注意有关BSON.encode
和pymongo.collection.Collection.insert_one
bson.BSON.encode
必须在其他参数中传递document
。
文档可以是任何映射类型(例如:class:dict
)。
pymongo.collection.Collection.insert_one
应该传递dict
,bson.son.SON
,bson.raw_bson.RawBSONDocument
的实例或继承自collections.MutableMapping
的类型。
知道可以传递一个可变映射,我们可以将我们的JSON模板反序列化为它的Python表示并直接插入。
from pymongo import MongoClient
import json
dbclient = MongoClient()
db = dbclient.sensors
def main():
with open('fakedata/sensor.json') as template:
template_dct = json.load(template)
result = db.test.insert_one(template_dct)
print('Inserted post id %s ' % result.inserted_id)
if __name__ == "__main__":
main()