如何在Python请求返回的嵌套JSON对象中获取数组的长度?

时间:2017-03-20 21:33:47

标签: python python-2.7 python-requests

我试图将一些代码从Perl移植到Python。该代码使用非默认标头执行HTTP GET请求。响应是JSON文档。顶级元素是一个具有名为queryResponse的键的对象。该元素的值也是一个对象,它有一个名为entity的键。该元素的值是一个数组。我想要该数组中的元素数量。

这是Perl代码:

my ($first, $max, $count) = (0, 1000, 1000);

while ($count == $max) {
  my $debugFlag = 1;
  my $uri = "/webacs/api/v2/data/Devices.json?.full=true&.nocount=true&" .
            ".firstResult=$first&.maxResults=$max";
  $piConnection->GET($uri, $headers);
  my $response = decode_json $piConnection->responseContent();
  $first = $first + 1000;
  $count = scalar @{$response->{queryResponse}{entity}};

这就是我目前在Python中所拥有的:

firstResult = 0
maxResults = 1000
count = 1000

while count == maxResults:
    test_urn = (URL + '/webacs/api/v2/data/Devices?.full=True&.nocount=True&.maxResults=%d&.firstResult=%d') % (maxResults, firstResult)
    get_response = requests.get(test_urn, verify=False)
    firstResult = firstResult + 1000
    count = len(get_response['queryResponse']) # This is the line I need help with
    print get_response.text

我遇到问题的部分是在JSON响应中获取数组的长度。我怎么能这样做?

1 个答案:

答案 0 :(得分:2)

use JSON::XS qw( decode_json );
my $response_json = '{ "queryResponse": { "entity": [ "a", "b", "c" ] } }';
my $response = decode_json($response_json);
my $count = @{ $response->{queryResponse}{entity} };

相当于

import json
response_json = '{ "queryResponse": { "entity": [ "a", "b", "c" ] } }'
response = json.loads(response_json)
count = len(response['queryResponse']['entity'])

除了可能处理错误之外。

response_json来自get_response.text response可以从get_response.json()或如图所示获得。