这是json变量
jsonout = [{"city": "Springfield", "id": 1, "name": "Moes Tavern"}, {"city": "Springfield", "id": 2, "name": "Springfield Power Plant"}, {"city": "Fountain Lakes", "id": 3, "name": "Kath and Kim Pty Ltd"}]
我正在使用以下命令导入json变量
es.bulk((es.index_op(doc, id=doc('id')) for doc in jsonout), index='dbmysql', doc_type='person')
以下是错误
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-14-10faf5c5bb89> in <module>()
1 docs = [{'id': 2, 'name': 'Jessica Coder', 'age': 32, 'title': 'Programmer'}, {'id': 3, 'name': 'Freddy Tester', 'age': 29, 'title': 'Office Assistant'}]
----> 2 es.bulk((es.index_op(doc, id=doc('id')) for doc in jsonout), index='dbmysql', doc_type='person')
d:\nvk\USER\Anaconda2\lib\site-packages\pyelasticsearch\client.pyc in decorate(*args, **kwargs)
91 elif k in convertible_args:
92 query_params[k] = kwargs.pop(k)
---> 93 return func(*args, query_params=query_params, **kwargs)
94 return decorate
95 return decorator
d:\nvk\USER\Anaconda2\lib\site-packages\pyelasticsearch\client.pyc in bulk(self, actions, index, doc_type, query_params)
445 response = self.send_request('POST',
446 [index, doc_type, '_bulk'],
--> 447 body='\n'.join(actions) + '\n',
448 query_params=query_params)
449
<ipython-input-14-10faf5c5bb89> in <genexpr>((doc,))
1 docs = [{'id': 2, 'name': 'Jessica Coder', 'age': 32, 'title': 'Programmer'}, {'id': 3, 'name': 'Freddy Tester', 'age': 29, 'title': 'Office Assistant'}]
----> 2 es.bulk((es.index_op(doc, id=doc('id')) for doc in jsonout), index='dbmysql', doc_type='person')
TypeError: 'str' object is not callable
答案 0 :(得分:0)
doc
可能是不可赎回的字符串。通常jsonout
听起来不应该有功能。
答案 1 :(得分:0)
你遗漏了一些问题 - 在错误示例中你有这段代码:
1 docs = [{'id': 2, 'name': 'Jessica Coder', ...}, {...}]
2 es.bulk((es.index_op(doc, id=doc('id')) for doc in jsonout), index='dbmysql', doc_type='person')
第1行中有docs
变量,但第2行中有jsonout
。
而且,如果您将docs
变量而非jsonout
放入第二行,则会出现类似'dict' object is not callable
的错误,因为您有doc('id')
(而不是doc['id']
})和doc
是一本字典。
所以我怀疑你的实际jsonout
变量值也有问题 - 它可能是一个字符串列表而不是字典列表。
答案 2 :(得分:0)
最终找到解决方案。
我们可以使用json.loads将str对象转换为json对象。
json.loads(jsonout)