Python 在单引号中返回 json 响应而不是双引号 (Elasticsearch API)

Python is returning json response in single quotes not double (Elasticsearch API)

我正在使用 python 中的 Elasticsearch 库来查询 elasticsearch 服务器,如下所示:

query = {
   "query":{
      "match_all":{}
   }
}
es = Elasticsearch('localhost:9200')
res = es.search(index='myindex', body=query)
with open('response.json', 'w') as out:
    out.write(res)
    # json.dump(res, out) also gives the same result

我保存到文件的输出格式为

{ 
    'key':'value',
    'key2': {
       'key3' : 'value2'
    }
}

注意这里的单引号。我知道我可以做一个简单的查找和替换或使用 sed 将单引号更改为双引号,但是,我想知道为什么在终端使用 curl 时会发生这种情况,但情况并非如此。

我希望以适当的 json 格式转储输出

Python 字典对象不一定自动采用 json 格式。可以通过在如下响应中使用 json.dumps() 来解决上述问题:

query = {
   "query":{
      "match_all":{}
   }
}
es = Elasticsearch('localhost:9200')
res = es.search(index='myindex', body=query)
with open('response.json', 'w') as out:
    out.write(json.dumps(res))

这会将 res 转换为 json 格式,如下所示:

{ 
    "key":"value",
    "key2": {
       "key3" : "value2"
    }
}