2017-09-13 2 views
0

J'utilise la bibliothèque urllib pour ouvrir une URL et lire les données. Les données sont ensuite converties en une chaîne et doivent être entrées dans une collection en pymongo. Mon code actuel est le suivant:Chargement d'une chaîne JSON pour stockage dans pyMongo

import pymongo, urllib.request, json 
from pymongo import MongoClient 

reponse = urllib.request.urlopen('Website with JSON on it') 
plstr = str(response.read()) 

module4 = MongoClient() 

mycol= module4.payload 

output = mycol.insert_one(plstr) 

print(output.inserted_id) 

Je ne peux pas comprendre comment avoir MongoDB lire correctement dans le JSON donc je l'ai converti en chaîne, mais ce n'est pas nécessaire à l'achèvement du problème. Toute façon d'avoir MongoDB stocker les données JSON serait génial. Merci.

+0

Quelle est votre question? –

+0

Désolé, j'ai posté accidentellement avant que j'ai eu fini l'écriture – bnoos

+0

Je ne pense pas qu'un fichier json est un nom de collection valide. 'module4 [payload]' signifie 'payload' est une collection, mais' payload' est une donnée json qui est très peu probable d'être une (peut-être même impossible). –

Répondre

0

Par exemple, vous pouvez tout simplement passer votre document à insert_one()

import requests 
import json 
import pymongo 

# You need a pymongo version > 3.0 
print pymongo.version 

r = requests.get('https://jsonplaceholder.typicode.com/posts/1') 
your_document = json.loads(r.text) # let's suppose your_document is list of dicts 

# connection on the default host and port 
client = pymongo.MongoClient() 

# your db name 
your_db = client.db_name 

# your collection name 
your_collection = your_db.collection_name 

# let's suppose you want to load the first dict of the list 
result = your_collection.insert_one(your_document[0]) 

# print the ObjectId of the inserted doc 
print result.inserted_id 

de la doc: your_document doit être un type de cartographie mutable. Utilisez le dict que vous venez de recevoir du Site Web

+0

Cela a été l'une des façons que j'ai essayé de le faire mais quand je donne une chaîne en tant que your_document et que j'exécute la méthode insert_one, j'obtiens l'erreur suivante: "L'objet 'Collection' n'est pas appelable. La méthode insert_one 'sur un objet' Database 'échoue car il n'existe pas de telle méthode. " – bnoos

+0

Cela semble étrange. 'insert_one()' est disponible en version 3.0. Quel pymongo utilisez-vous? – floatingpurr

+0

J'utilise 3.5.1 – bnoos