如何使用python正确打印json响应

如何使用python正确打印json响应,python,django,Python,Django,我有如下json数组 payload.json {"provision":"provision section 1", "subsets": [{"item":"milk"},{"payments": [{"price": "170 usd"}]}, {"item":"sugar"},{"payments": [{"price": "70 usd"}]}, {"item":"tea"},{"payment

我有如下json数组

payload.json

{"provision":"provision section 1",
       "subsets": [{"item":"milk"},{"payments": [{"price": "170 usd"}]},
                   {"item":"sugar"},{"payments": [{"price": "70 usd"}]}, 
                   {"item":"tea"},{"payments": [{"price": "90 usd"}]}]}
下面是我用来获取json响应的代码

import json
import requests
r = requests.get('http://localhost/payload.json')
stat=r.status_code
head=r.headers['content-type']
encode=r.encoding
texting=r.text
result=r.json()

print(stat)
print(head)
print(texting)
print(result)
我可以在json中成功地获得结果

我的要求: 如何成功循环打印出准备金项目价格的值。
如果我尝试类似于
print(result.provision)
,它将显示错误dict对象没有属性provision

此时您不再有JSON对象,JSON只是服务器和您之间传输的方式
r.json()
将其翻译成Python字典

{"provision":"provision section 1",
       "subsets": [{"item":"milk"},{"payments": [{"price": "170 usd"}]},
                   {"item":"sugar"},{"payments": [{"price": "70 usd"}]}, 
                   {"item":"tea"},{"payments": [{"price": "90 usd"}]}]}
您可以使用例如
result['provision']
访问Python字典的键,并可以打印该键


也就是说,由于您还使用Django标记了它,所以在Django模板中,您仍然会使用
result.provision
;它尝试了几件事,直到得到一个可以打印的结果,包括结果是一个字典并提供它的一个键的情况。

在这一点上,你不再有JSON对象,JSON只是它在服务器和你之间传输的方式
r.json()
将其翻译成Python字典

您可以使用例如
result['provision']
访问Python字典的键,并可以打印该键


也就是说,由于您还使用Django标记了它,所以在Django模板中,您仍然会使用
result.provision
;它会尝试几件事,直到得到可以打印的结果,包括结果是字典并提供其密钥的情况。

您得到的错误:

provision provision section 1
subsets [{'item': 'milk'}, {'payments': [{'price': '170 usd'}]}, {'item': 'sugar'}, {'payments': [{'price': '70 usd'}]}, {'item': 'tea'}, {'payments': [{'price': '90 usd'}]}]
dict对象没有属性规定

原因是:

provision provision section 1
subsets [{'item': 'milk'}, {'payments': [{'price': '170 usd'}]}, {'item': 'sugar'}, {'payments': [{'price': '70 usd'}]}, {'item': 'tea'}, {'payments': [{'price': '90 usd'}]}]
因为dict本身没有任何属性

同时

provision provision section 1
subsets [{'item': 'milk'}, {'payments': [{'price': '170 usd'}]}, {'item': 'sugar'}, {'payments': [{'price': '70 usd'}]}, {'item': 'tea'}, {'payments': [{'price': '90 usd'}]}]
正如@RemcoGerlich所述,既然它是一个dict,您可以通过以下方式访问它的Elemenet:

result = {"provision":"provision section 1",
       "subsets": [{"item":"milk"},{"payments": [{"price": "170 usd"}]},
                   {"item":"sugar"},{"payments": [{"price": "70 usd"}]},
                   {"item":"tea"},{"payments": [{"price": "90 usd"}]}]}

print(result['provision'])
print(result['subsets'])

for k,v in result.items():
    print(k,v)
输出

provision provision section 1
subsets [{'item': 'milk'}, {'payments': [{'price': '170 usd'}]}, {'item': 'sugar'}, {'payments': [{'price': '70 usd'}]}, {'item': 'tea'}, {'payments': [{'price': '90 usd'}]}]
编辑

provision provision section 1
subsets [{'item': 'milk'}, {'payments': [{'price': '170 usd'}]}, {'item': 'sugar'}, {'payments': [{'price': '70 usd'}]}, {'item': 'tea'}, {'payments': [{'price': '90 usd'}]}]
由于
目录
包含带有列表的元素:

result = {"provision":"provision section 1",
       "subsets": [
           {"item":"milk"},
           {"payments": [{"price": "170 usd"}]},
           {"item":"sugar"},
           {"payments": [{"price": "70 usd"}]},
           {"item":"tea"},
           {"payments": [{"price": "90 usd"}]}
       ]
          }
假设您想要获取
子集中的第一个元素:

print(result.get('subsets')[0])   # {'item': 'milk'}
何处为

print(result.get('subsets')[0].values())    # dict_values(['milk'])

您得到的错误

provision provision section 1
subsets [{'item': 'milk'}, {'payments': [{'price': '170 usd'}]}, {'item': 'sugar'}, {'payments': [{'price': '70 usd'}]}, {'item': 'tea'}, {'payments': [{'price': '90 usd'}]}]
dict对象没有属性规定

原因是:

provision provision section 1
subsets [{'item': 'milk'}, {'payments': [{'price': '170 usd'}]}, {'item': 'sugar'}, {'payments': [{'price': '70 usd'}]}, {'item': 'tea'}, {'payments': [{'price': '90 usd'}]}]
因为dict本身没有任何属性

同时

provision provision section 1
subsets [{'item': 'milk'}, {'payments': [{'price': '170 usd'}]}, {'item': 'sugar'}, {'payments': [{'price': '70 usd'}]}, {'item': 'tea'}, {'payments': [{'price': '90 usd'}]}]
正如@RemcoGerlich所述,既然它是一个dict,您可以通过以下方式访问它的Elemenet:

result = {"provision":"provision section 1",
       "subsets": [{"item":"milk"},{"payments": [{"price": "170 usd"}]},
                   {"item":"sugar"},{"payments": [{"price": "70 usd"}]},
                   {"item":"tea"},{"payments": [{"price": "90 usd"}]}]}

print(result['provision'])
print(result['subsets'])

for k,v in result.items():
    print(k,v)
输出

provision provision section 1
subsets [{'item': 'milk'}, {'payments': [{'price': '170 usd'}]}, {'item': 'sugar'}, {'payments': [{'price': '70 usd'}]}, {'item': 'tea'}, {'payments': [{'price': '90 usd'}]}]
编辑

provision provision section 1
subsets [{'item': 'milk'}, {'payments': [{'price': '170 usd'}]}, {'item': 'sugar'}, {'payments': [{'price': '70 usd'}]}, {'item': 'tea'}, {'payments': [{'price': '90 usd'}]}]
由于
目录
包含带有列表的元素:

result = {"provision":"provision section 1",
       "subsets": [
           {"item":"milk"},
           {"payments": [{"price": "170 usd"}]},
           {"item":"sugar"},
           {"payments": [{"price": "70 usd"}]},
           {"item":"tea"},
           {"payments": [{"price": "90 usd"}]}
       ]
          }
假设您想要获取
子集中的第一个元素:

print(result.get('subsets')[0])   # {'item': 'milk'}
何处为

print(result.get('subsets')[0].values())    # dict_values(['milk'])

在DirtyBit,感谢您的回复。请告诉我如何获取项目和价格的值。正如你所看到的,我们有牛奶、茶、糖,价格有170美元、70美元、90美元。我尝试过这个代码,但没有运气#子集是一个切片,所以你必须在结果['Subsets]:print(v['item'])#在子集中,付款也是s在v['payments']:print(v['price'])@nancymoree
print(结果['Subsets'][0]。value()
应该在DirtyBit给你
milk
,谢谢你的回复。请告诉我如何获取项目和价格的值。正如你所看到的,我们有牛奶、茶、糖,价格有170美元、70美元、90美元。我尝试过这个代码,但没有运气#子集是一个切片,所以你必须在结果['Subsets]:print(v['item'])#在子集中,付款也是s在v['payments']:print(v['price'])@nancymoree
print(结果['Subsets'][0]。values())
应该在RemcoGerlich给你
milk
,谢谢你的回复。现在,我可以得到价值的规定。请告诉我如何获取项目和价格的值。正如你所看到的,我们有牛奶、茶、糖,价格有170美元、70美元、90美元。我尝试过这段代码,但运气不好#子集是一个切片,所以你必须在结果['Subsets]:print(v['item'])中为v循环它#在子集中,付款也是s在v['payments']:print(v['price'])@nancymoree:对于一个so问题来说,这一切都有点过分了,如果我的答案,特别是DirtyBit的答案还不够,那么我认为你真的应该花更多的时间学习Python教程,熟悉字典、列表、for循环等等。在RemcoGerlich,感谢你的回复。现在,我可以得到价值的规定。请告诉我如何获取项目和价格的值。正如你所看到的,我们有牛奶、茶、糖,价格有170美元、70美元、90美元。我尝试过这段代码,但运气不好#子集是一个切片,所以你必须在结果['Subsets]:print(v['item'])中为v循环它#在子集中,付款也是s在v['payments']:print(v['price'])@nancymoree:对于一个so问题来说,这一切都有点过分了,如果我的答案,特别是DirtyBit的答案还不够,那么我认为您真的应该花更多的时间学习Python教程,熟悉字典、列表、for循环等等。