2

値をループして検証するための Python 辞書パスを動的に作成するのに問題があります。これが私がやりたいことです:

Requests 1.0 を使用して API 呼び出しを行い、JSON 応答を dict に保存します。

response = requests.get(path/to/file.json).json()

応答オブジェクトは次のようにフォーマットされます。

{   
"status": "OK",
"items": [
    {
        "name": "Name 1",
        "id": 0,
        "address":{
            "city": "New York",
        }
    },
    {
        "name": "Name 2",
        "id": 1,
        "address":{
            "city": "New York",
        }
    },
    {
        "name": "Name 3",
        "id": 2,
        "address":{
            "city": "New York",
        }
    }]
}

検証のために、応答の辞書、フィールド、およびを関数に送信します。この関数は応答オブジェクトを受け取り、それにフィールド エントリを追加してそのパスを定義し、値に対して検証します。したがって、理論的には次のようになります。

response[field] = value

これを行うために私が書いたコードは次のとおりです。

def dynamic_assertion(response, field, value):
        i = 0
        stations = "response['items']"
        count = len(response['items'])
        while i < count:
            path = '%s[%s]%s' % (stations, i, field)
            path = path.strip("")
            if path != value:
                print type(path)
                return False
            i += 1
        return True

dynamic_assertion(response, "['address']['city']", "New York")

パス文字列を作成すると、それはもはやオブジェクトではないことに気付きました。応答オブジェクトを保持し、トラバースする参照パスを追加できるようにするにはどうすればよいですか? これも可能ですか?

4

1 に答える 1