我试图将一些代码从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响应中获取数组的长度。我怎么能这样做?
答案 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()
或如图所示获得。