【问题标题】:How to compare json file with expected result in Python 3?如何在 Python 3 中将 json 文件与预期结果进行比较?
【发布时间】:2018-05-14 14:17:28
【问题描述】:

我需要准备测试,它将 .json 文件的内容与预期结果进行比较(我们想检查 .json 中的值是否由我们的开发工具正确生成)。 对于测试,我将使用机器人框架或单元测试,但我还不知道如何正确解析 json 文件。 json示例:

{
    "Customer": [{
            "Information": [{
                    "Country": "",
                    "Form": ""
                }
            ],
            "Id": "110",
            "Res": "",
            "Role": "Test",
            "Limit": ["100"]
        }]
}

所以在我执行这个之后:

with open('test_json.json') as f:
    hd = json.load(f)

我得到 dict 'hd' 其中键是:

dict_keys(['Customer'])

和价值观:

dict_values([[{'Information': [{'Form': '', 'Country': ''}], 'Role': 'Test', 'Id': '110', 'Res': '', 'Limit': ['100']}]])

我的问题是我不知道如何从 Dict 中仅获取一个值(例如:角色:测试),因为我只能提取整个值。我可以准备一个长字符串进行比较,但这不是测试的最佳解决方案。

有什么想法可以从.json 文件中仅获取一行吗?

【问题讨论】:

  • 为什么?它会解决我的问题吗?
  • 你可以通过_role = hd['Customer'][0]['Role']访问Test
  • @glibdud 你说得对,我的错。我删除了那条评论。
  • 你只要values[0]['Role']
  • @AliYılmaz 你的意思是:print(hd['Customer'][0]['Role'])?,这里的 [0] 是什么意思 - 我是 python 中的菜鸟:D

标签: python json python-3.x


【解决方案1】:

您的 JSON 具有单键“客户”,并且具有列表类型的值。因此,当您 ppass dict_keys(['Customer']) 时,您将获得列表值。

>>> hd['Customer']
[{'Id': '110', 'Role': 'Test', 'Res': '', 'Information': [{'Form': '', 'Country': ''}], 'Limit': ['100']}]

列表中的第一个元素:

>>> hd['Customer'][0]
{'Id': '110', 'Role': 'Test', 'Res': '', 'Information': [{'Form': '', 'Country': ''}], 'Limit': ['100']}

现在使用以下命令访问 dict 结构内部:

>>> hd['Customer'][0]['Role']
'Test'

【讨论】:

  • 太棒了!谢谢 - 现在我明白了
  • @pyton17 请接受我的回答,如果它适合你,请点赞。谢谢
【解决方案2】:

您可以通过运行将您加载的字典(例如 hd)与预期结果字典(例如 expected_dict)进行比较

hd.items() == expected_dict.items()

【讨论】:

  • 既然可以比较字典,为什么还要对项目进行测试?
  • 我无法比较整个字典,可以更改其他文件。我只需要比较一个文件。
猜你喜欢
  • 1970-01-01
  • 2018-04-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-10
  • 1970-01-01
相关资源
最近更新 更多