如何在python中制作有效的格式JSON?

时间:2014-06-13 05:13:51

标签: python json elasticsearch

我想让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格式?我认为这不是用双引号替换单引号的好方法。如果有办法,请帮助我。

2 个答案:

答案 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\"'