将一个dicts列表转换为dicts的dict,以发送一个" complex" json到cloudant

时间:2017-01-03 15:26:08

标签: python json python-2.7 dictionary cloudant

大家好,2017年大家好!

我有一个问题是将一个安静的复杂json发送到cloudant数据库。 据我所知(并且它并不是很远,因为我总是新手),使用cloudant for python在cloudant数据库上发送文件的唯一方法是创建一个变量" data& #34;

data = {
    '_ID': 'userInfo',
    'Name': 'Manu'
    'Age': 23,
    'Hobbies': ['cloudant', 'python', 'dockers']
    }

并使用命令

my_document = my_database.create_document(data)

在DB中成功创建文件。

但是当数据不在dict中时,看起来一切都变得比较棘手,因为在某些时候.create_document()方法尝试提取键和值,当你给他一个列表时它会变得很疯狂 链接到控制台错误:https://www.jepix.fr/images/cloudanterror.png

但它不是我试图给他的常规列表,它是一个很棒的词典:-)

[
   {dict1},
   {dict2},
   {dict3},
   {dict4},
   { },
   { },
   { },
   { },
   { }
]

在dicts中有奇妙的词汇:-D 我想我需要一种方法将dicts列表转换为dicts的dict,我绝对必须保留这个dict结构,因为它被其他同事使用'模板,解析器等或我的学徒的底部将被无情地踢!

import cloudant
import json
from cloudant.client import Cloudant


client = Cloudant("USR", "PWD", url)
client.connect()

# Client tasks ##########################################
session = client.session()
print 'Username: {0}'.format(session['userCtx']['name'])
print 'Databases: {0}'.format(client.all_dbs())

my_db = client['scenario-json']

with open('scenarioGenerated.json', 'r') as fp:
    json_str = fp.read()

json_dict = json.loads(json_str)
my_doc = my_db.create_document(json_dict)



client.disconnect()

我已经尝试了新手的绝望行动,比如将列表转换为带有dict()函数的dict,但我得到一个参数错误告诉我我没有足够的参数来调用这个函数(此时我非常接受它并寻找另一种方式)

我还使用json.load / .loads / .dump / .dumps尝试了用于python的json库,但它将json转换为字符串(循环回" str"对象没有" get"属性错误)

我在溢出帖子上看到了一个解决方案:Python dump dict to json file

但我需要做相反的事情,比如阅读json并填写一个字典? 我不认为这是最聪明的举动,因为字典填充过程可能会破坏字典层次......

所以imo,如果你有一个很好的方法将dicts列表转换为dicts的字典,那就太好了!

对不起这篇长篇帖子和非常愚蠢的问题,但我喜欢鲸鱼海中的浮游生物,这不是一个好的情况:-p

非常感谢。

2 个答案:

答案 0 :(得分:1)

简单但非常不必要的是在整个列表中放置一个字典。所以一个带有一个键和一个元素的字典。那个元素就是你的名单......我不明白为什么你有这个结构,为什么这是它需要的,所以我很难以任何其他方式帮助。

答案 1 :(得分:0)

您是否需要通过一次调用create_document()功能创建所有数据,还是可以进行多次通话?如果你可以做第二个,我会写这样的东西:

documents = [ {dict1}, {dict2}, {dict3}, ...]
for document in documents:
    my_document = my_database.create_document(document)
    # Do some more processing.

这将为列表中的每个文档创建一个文档。

通过thissuitisblacknot跟进评论,您可能会执行以下操作:

documents = [ {dict1}, {dict2}, {dict3}, ...]
data = { "docs": documents }
my_database.bulk_create_document(data) # Guessed at bulk_create_document()