You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Python 3中对比JSON文件与预期结果并提取指定值

解决JSON嵌套结构的字段提取与验证问题

嘿,这问题我熟!你的JSON结构是嵌套的列表+字典组合,所以得一层一层往下定位,完全不用搞全量字符串对比,直接精准提取目标字段验证就行,不管用unittest还是Robot Framework都有简单的办法~

一、Python + unittest 实现

你的解析结果里,Customer对应的是一个列表(哪怕只有一个元素),所以得先取列表的第一个元素,再从字典里拿Role字段。直接上代码例子:

import json
import unittest

class TestJsonValidation(unittest.TestCase):
    def test_check_role_value(self):
        # 读取并解析JSON文件
        with open('test_json.json', 'r') as f:
            json_data = json.load(f)
        
        # 逐层定位:根字典 → Customer列表 → 第一个用户字典 → Role字段
        actual_role = json_data['Customer'][0]['Role']
        
        # 验证值是否符合预期
        self.assertEqual(actual_role, 'Test', "Role字段值不符合预期")
        
        # 拓展:验证其他字段的例子
        actual_id = json_data['Customer'][0]['Id']
        self.assertEqual(actual_id, '110', "Id字段值不符合预期")
        
        # 验证列表类型的字段(比如Limit)
        actual_limit = json_data['Customer'][0]['Limit'][0]
        self.assertEqual(actual_limit, '100', "Limit字段值不符合预期")

核心逻辑就是:先处理列表(用索引[0]取第一个元素),再访问字典的键,这样就能精准拿到单个字段的值,然后用unittest的断言做验证就行。

二、Robot Framework 实现

Robot里可以用专门的JSONLibrary来简化操作,也可以用内置库实现,两种方案都给你:

方案1:用JSONLibrary(推荐)

先安装库:pip install robotframework-jsonlibrary,然后写用例:

*** Settings ***
Library    JSONLibrary
Library    OperatingSystem

*** Test Cases ***
Verify JSON Role Field
    # 读取JSON文件内容
    ${json_content}=    Get File    test_json.json
    # 解析JSON为可操作对象
    ${json_obj}=    Parse Json    ${json_content}
    # 用JSONPath定位Role字段:$.Customer[0].Role
    ${actual_role}=    Get Value From Json    ${json_obj}    $.Customer[0].Role
    # 验证值是否匹配
    Should Be Equal    ${actual_role}    Test    msg=Role字段值不符合预期
    
    # 验证其他字段示例
    ${actual_id}=    Get Value From Json    ${json_obj}    $.Customer[0].Id
    Should Be Equal    ${actual_id}    110
    
    ${actual_limit}=    Get Value From Json    ${json_obj}    $.Customer[0].Limit[0]
    Should Be Equal    ${actual_limit}    100

JSONPath的语法非常灵活,哪怕结构更复杂也能轻松定位,很适合测试场景。

方案2:只用内置库(无需额外安装)

如果不想加新库,用BuiltIn和Collections也能搞定:

*** Settings ***
Library    BuiltIn
Library    Collections
Library    OperatingSystem

*** Test Cases ***
Verify JSON Role Without Extra Library
    # 读取文件并解析为Python对象
    ${json_content}=    Get File    test_json.json
    ${json_obj}=    Evaluate    json.loads('''${json_content}''')    json
    # 提取Customer列表
    ${customer_list}=    Get From Dictionary    ${json_obj}    Customer
    # 取列表第一个元素(用户字典)
    ${customer_dict}=    Get From List    ${customer_list}    0
    # 提取Role字段值
    ${actual_role}=    Get From Dictionary    ${customer_dict}    Role
    # 验证
    Should Be Equal    ${actual_role}    Test

关键提醒

你之前提取失败的原因是忽略了Customer对应的值是列表类型,不能直接hd['Customer']['Role'],必须先通过索引[0]取出列表里的字典元素,再访问字段哦~

内容的提问来源于stack exchange,提问作者pyton17

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.27 09:41:51