【问题标题】:json.loads string not being read properly from apijson.loads 字符串未从 api 正确读取
【发布时间】:2022-01-12 04:46:52
【问题描述】:

运行以下代码后,我没有找到原因,

import xmlrpc.client
import json

from tkinter import *

app = Tk()
api = xmlrpc.client.ServerProxy("http://user:pass@localhost:8442/")

listAddress = api.listAddresses()

print (listAddress)

jsonAddresses = json.loads(listAddress)
print (jsonAddresses)

它告诉我 JSON 对象必须是一个字符串。我在那里添加了print (listAddress),以表明它实际上是一个 JSON 格式的字符串,并且输出在告诉我它需要是一个字符串之前将其打印出来。此处显示:

{'addresses': [{'chan': False, 'address': 'BM-2cXU266jqEXWN9GZ3syVP9dNiWM59z8br8', 'enabled': True, 'stream': 1, 'label': 'unused API address'}, {'chan': False, 'address': 'BM-NB21wfaCzZvmX7BFrat1zSocRuYCMVvQ', 'enabled': True, 'stream': 1, 'label': 'unused API address'}]}
Traceback (most recent call last):
  File "/home/otsudo/Code/part_manager-master/help.py", line 13, in <module>
    jsonAddresses = json.loads(listAddress)
  File "/usr/lib/python3.8/json/__init__.py", line 341, in loads
    raise TypeError(f'the JSON object must be str, bytes or bytearray, '
TypeError: the JSON object must be str, bytes or bytearray, not dict

我必须在这里遗漏一些东西。感谢所有帮助。

【问题讨论】:

  • listAddress dictjson.dumps(listAddress) 是字符串。
  • @Otsubosan 你知道listAddress 的类型吗? json.loads 只接受字符串作为参数。
  • 我自己试过直接访问https://demotivation-quotes-api.herokuapp.com/graphql,看来这个端点根本不是RESTful API接口……你自己试过了吗?
  • @rubys 谢谢!这更有意义。我对使用 json 还很陌生,所以我猜这很明显是我错过的。

标签: python json xml-rpc


【解决方案1】:

我没有看到 api.listAddresses() 的文档,但是如果你在 listAddress 周围包装一个类型

type(listAddress)

你会看到它已经为你把它变成了一个 python 字典。

所以你不需要使用 json 库来加载数据。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-17
    • 1970-01-01
    • 1970-01-01
    • 2017-11-26
    • 2021-06-08
    • 2016-03-12
    • 2016-07-23
    • 2012-04-15
    相关资源
    最近更新 更多