我想让JSON从弹性搜索中获取查询。我使用此代码来构建查询:
search_doc = {}
search_doc.update({"sort": [{"re_max": {"order": "desc"}}]})
search_doc.update({"from": 0})
search_doc.update({"size": 100})
search_doc.update({"filter": {"and": [{"term": {"country_id": "10"}},{"range": {"pub_date": {"gte": "2014-06-07T00:00:00.0", "lte": "2014-06-07T23:59:59.0"}}}]}})
如你所见,我在所有字符串中都使用了双引号,但请查看打印结果:
{'sort': [{'re_max': {'order': 'desc'}}], 'filter': {'and': [{'term': {'country_id': '10'}}, {'range': {'pub_date': {'gte': '2014-06-07T00:00:00.0', 'lte': '2014-06-07T23:59:59.0'}}}]}, 'from': 0, 'size': 100}
所有单引号在JSON格式中无效或至少弹性搜索不接受它。有没有办法让我的字符串以有效的JSON格式?我认为这不是用双引号替换单引号的好方法。如果有办法,请帮助我。
答案 0 :(得分:5)
不要{d} {d}。使用json
模块获取有效的JSON字符串:
print
该模块还允许您执行相反的转换,将JSON转换为Python数据结构:
import json
json_string = json.dumps(search_doc)
答案 1 :(得分:1)
您使用的词典不是JSON而是python内部对象。您可以使用json.dumps()
创建正确的JSON字符串。 python标准是单引号,这就是你在打印时看到它们的原因。如果你需要在字符串本身内部使用引号,你可以使用反斜杠来转义它们,例如: '\"order\"'