【问题标题】:Python complete newbie, JSON formattingPython完整新手,JSON格式化
【发布时间】:2023-03-19 04:18:01
【问题描述】:

我以前从未使用过 Python,但由于另一种(专有)语言的一些限制,我尝试使用它来从 Web 服务中检索一些值并将它们以 json 格式返回给家庭自动化处理器。下面的相关代码部分返回:

[u'Name:London', u'Mode:Auto', u'Name:Ling', u'Mode:Away']
["Name:London", "Mode:Auto", "Name:Ling", "Mode:Away"]

…这不是有效的 json。我确信这是一个非常愚蠢的问题,但我在这里搜索过,但没有找到对我有帮助的答案。如果我遗漏了一些明显的东西,我深表歉意,但谁能告诉我我需要做什么来确保 json.dumps 命令以正确的格式输出数据?

CresData = []
for i in range(0, j):
    r = requests.get('http://xxxxxx.com/WebAPI/emea/api/v1/location/installationInfo?userId=%s&includeTemperatureControlSystems=True' % UserID, headers=headers)

    CresData.append("Name:" + r.json()[i]['locationInfo']['name'])

    r = requests.get('http://xxxxxx.com/WebAPI/emea/api/v1/location/%s/status?includeTemperatureControlSystems=True' % r.json()[i]['locationInfo']['locationId'], headers = headers)

    CresData.append('Mode:' + r.json()['gateways'][0]['temperatureControlSystems'][0]['systemModeStatus']['mode'])

Cres_json = json.dumps(CresData)
print CresData
print Cres_json

【问题讨论】:

  • 第一个输出,带有u''s,来自print CresData,是 Python 原生的列​​表数据结构。第二个输出来自print Cres_json,是有效的 JSON。太好了……不要print CresData……!?
  • 试试这个:Cres_json = json.dumps(json.loads(CresData))
  • @Shekhar CresDatalist,你不能这样json.loads
  • @WayTooUnCool 你能告诉你预期的输出格式是什么吗?
  • 是的@deceze 我现在明白了,使用 json.dumps() 也没有意义

标签: python json


【解决方案1】:

我无法测试代码,因为您提到的链接不是实时链接,但您的解决方案应该是这样的

您似乎正在寻找带有键值对的 JSON 格式。您需要将 dict 对象传递给 json.dumps() ,它将以所需的 JSON 格式返回您的字符串。

CresData = dict()
key_str = "Location"
idx = 0
for i in range(0, j):
    data = dict()
    r = requests.get('http://xxxxxx.com/WebAPI/emea/api/v1/location/installationInfo?userId=%s&includeTemperatureControlSystems=True' % UserID, headers=headers)
        data["Name"] = r.json()[i]['locationInfo']['name']
    r = requests.get('http://xxxxxx.com/WebAPI/emea/api/v1/location/%s/status?includeTemperatureControlSystems=True' % r.json()[i]['locationInfo']['locationId'], headers = headers)
        data["mode"] = r.json()['gateways'][0]['temperatureControlSystems'][0]['systemModeStatus']['mode']
    CresData[key_str + str(idx)] = data
    idx +=1

Cres_json = json.dumps(CresData)
print CresData
print Cres_json

【讨论】:

  • JSON 有 objects,类似于 dicts,是的,但 JSON 也有 arrays,类似于 lists。绝对不需要将dicts 传递给json.dumps
  • 非常感谢您,这是最有帮助的,输出看起来好多了。但是,就我希望实现的目标而言,我应该更具体一些。最终,我想要这样的东西:
  • { "Location1": [ { "mode": "Auto", "temperature": 20.5, "isAvailable": true }] "Location2" [ { "mode": "Auto", "温度”:20.5,“isAvailable”:真}]
  • 我需要学习如何使用这个网站,Enter 按钮一直在发布我的信息!我试图从位置和模式开始“简单”,但最终位置是顶层,各种属性位于下一层。抱歉不清楚。
  • 我已经更新了答案,您可以像上面一样动态构建您的密钥,请耐心等待任何语法错误
猜你喜欢
  • 2021-07-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-02-04
  • 1970-01-01
  • 2022-10-30
相关资源
最近更新 更多