Maison  >  Questions et réponses  >  le corps du texte

通过Python将Json数据导入MongoDB

首先数据是以标准的json格式的文本。然后想要通过python脚本来导入Mongodb中。
json

{
    "service": "http", 
    "datetime": "2017-03-28 17:23:19", 
    "starttime": "1490692810", 
    "endtime": "1490692999", 
    "port": 80
}{  
    "service": "ewall", 
    "datetime": "2017-03-28 17:23:19",
    "starttime": "1490692810", 
    "endtime": "1490692999", 
    "port": 1328
}

python部分代码:

with open(filen, 'r') as f:
        while 1:
            try:
                jsonstr = f.readline().strip()
                # print jsonstr 可以输出整个json的内容
                if not jsonstr:
                    break
                try:
                    j = json.loads(jsonstr) #这里好像不处理的问题
                    
                except:
                    continue
                jsonlist.append(j)
            except:
                break

请问这个情况要怎么解决呢?谢谢

怪我咯怪我咯2741 Il y a quelques jours491

répondre à tous(3)je répondrai

  • 阿神

    阿神2017-04-18 10:31:42

    Votre problème est que le vôtre n'est pas au format json standard. Le format standard devrait être comme ceci

    [{
        "service": "http", 
        "datetime": "2017-03-28 17:23:19", 
        "starttime": "1490692810", 
        "endtime": "1490692999", 
        "port": 80
    },
    {  
        "service": "ewall", 
        "datetime": "2017-03-28 17:23:19",
        "starttime": "1490692810", 
        "endtime": "1490692999", 
        "port": 1328
    }]

    Deuxièmement, vos données sont lues en lignes. Veuillez me dire à quoi ressemble une ligne de vos données

    répondre
    0
  • 黄舟

    黄舟2017-04-18 10:31:42

    La réponse de @sheep3 est correcte.

    Si vous mettez JSON directement dans MongoDB, vous pouvez utiliser mongoimport (https://docs.mongodb.com/manu...

    Si vous souhaitez toujours traiter des données, vous pouvez utiliser un code comme celui-ci :

    import json
    filename = 'test.json'
    
    with open(filename, 'r') as f:
        content = json.load(f)

    Si le contenu du fichier JSON est plus grand que la mémoire, vous devez ouvrir le fichier JSON via le streaming. Vous pouvez utiliser le package ijson (https://pypi.python.org/pypi/...). L'utilisation est également relativement simple :

    import ijson
    
    with open('test.json') as fp:
        objects = ijson.items(fp, "item")
        for object in objects:
            print(object)

    répondre
    0
  • 迷茫

    迷茫2017-04-18 10:31:42

    La réponse de @Christoph nommait directement une solution plus simple et optimisée, et j'ai appris une astuce

    répondre
    0
  • Annulerrépondre