【发布时间】:2017-05-17 17:45:44
【问题描述】:
大家好,2017 年好!
我无法将安静的复杂 json 发送到 cloudant 数据库。 据我了解(因为我是一个完全的新手,所以它并不是很远),使用 cloudant for python 在 cloudant DB 上发送文件的唯一方法是创建一个变量“数据”
data = {
'_ID': 'userInfo',
'Name': 'Manu'
'Age': 23,
'Hobbies': ['cloudant', 'python', 'dockers']
}
并使用命令
my_document = my_database.create_document(data)
在数据库中成功创建文件。
但是当数据不在字典中时,看起来一切都变得更加棘手,因为在某些时候 .create_document() 方法会尝试提取键和值,当你给他一个列表时它会变得疯狂 链接到控制台错误:https://www.jepix.fr/images/cloudanterror.png
但这不是我试图给他的常规列表,这是一个宏伟的 dicts 列表:-)
[
{dict1},
{dict2},
{dict3},
{dict4},
{ },
{ },
{ },
{ },
{ }
]
在 dicts 中有奇妙的 dicts :-D 我想我需要一种方法将字典列表转换为字典的字典,我绝对必须保留这个字典结构,因为它被其他同事的模板、解析器等使用,否则我的学徒会被无情地踢!
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 并填写一个字典? 我认为这不是最聪明的举动,因为 dict-filling 过程可能会松散 dict 层次结构......
所以 imo,如果你有一个很好的方法将 dicts 列表转换为 dicts 的字典,那就太好了!
很抱歉,很长的帖子和非常无聊的问题,但我就像鲸鱼海洋中的浮游生物,这不是一个好的情况:-p
非常感谢。
【问题讨论】:
-
请出示您尝试过的代码,以便您在这里获得帮助
-
对 Cloudant 一无所知,但 documentation 表示,除了强制性的
_id和_rev字段外,文档可以包含您想要的任何其他 JSON。那么像{ "_id": "foo", "_rev": "bar", "my_array": [ ... ] }这样的东西不是更好吗? -
@SivaCn 完成,这应该可以工作,因为这是我在使用套接字进行训练时所做的,我曾经将 json 作为字符串加载和转储以通过套接字发送。
-
@ThisSuitIsBlack 不是你的意思是建立一个字典: data = { "_id": "killme", "my_array" : the_json_list_of_dicts }
-
@Manu 是的,没错。这样您就不必更改数据结构,只需将其嵌套在字典中即可。
标签: python json python-2.7 dictionary cloudant