无法访问python 3.8中的嵌套JSON

2024-05-20 19:34:53 发布

您现在位置:Python中文网/ 问答频道 /正文

处理来自Websockets订阅的响应

答复如下:

{'jsonrpc': '2.0', 'method': 'subscription', 'params': {'channel': 'book.BTC-PERPETUAL.none.1.100ms', 'data': {'timestamp': 1588975154127, 'instrument_name': 'BTC-PERPETUAL', 'change_id': 19078703948, 'bids': [[10019.5, 8530.0]], 'asks': [[10020.0, 506290.0]]}}}

我试图通过json.loads()到达"bids""asks"数组中的第一个也是唯一的值

代码如下所示:

   async def __async__get_ticks(self):
  async with self.ws as echo:
     await echo.send(json.dumps(self.request))
     while True:
            response = await echo.receive()
            responseJson = json.loads(response)
            print(responseJson["params"]["data"])

错误是这样的:

print(responseJson["params"]["data"])

KeyError: 'params'

但是我尝试,它不想捕获"jsonprc"之后的任何JSON,因为它成功地返回了2.0。除此之外的任何事情都会出现错误

我试着使用.get(),它有助于更深一层,但仍然不能更深

关于如何正确设置格式并达到bidsasks的任何想法

先谢谢你


Tags: echoselfjsondatagetasyncresponseparams
1条回答
网友
1楼 · 发布于 2024-05-20 19:34:53

我建议使用dict.get()方法,但请确保在查询预期具有嵌套dict的词典时将其设置为返回空词典

默认情况下(如果没有为dict.get()指定第二个参数),它将返回None。这就解释了为什么你只能深入一层

下面是一个例子:

empty_dict = {}
two_level_dict = {
    "one": {
        "level": "deeper!"
    }
}

# This will return None and the second get call will not fail, because
# the first get returned an empty dict for the .get("level") call to succeed. 
first_get = empty_dict.get("one", {}).get("level")

# This will return 'deeper!'
second_get = two_level_dict.get("one", {}).get("level")

print(first_get)
print(second_get)

相关问题 更多 >