Не удается преобразовать строку в JSON с помощью python 3? [Дубликат]

Вы можете использовать эту пользовательскую библиотеку (написанную с помощью Promise) для выполнения удаленного вызова.

function $http(apiConfig) {
    return new Promise(function (resolve, reject) {
        var client = new XMLHttpRequest();
        client.open(apiConfig.method, apiConfig.url);
        client.send();
        client.onload = function () {
            if (this.status >= 200 && this.status < 300) {
                // Performs the function "resolve" when this.status is equal to 2xx.
                // Your logic here.
                resolve(this.response);
            }
            else {
                // Performs the function "reject" when this.status is different than 2xx.
                reject(this.statusText);
            }
        };
        client.onerror = function () {
            reject(this.statusText);
        };
    });
}

Пример простого использования:

$http({
    method: 'get',
    url: 'google.com'
}).then(function(response) {
    console.log(response);
}, function(error) {
    console.log(error)
});
71
задан RobinJ 29 October 2014 в 21:08
поделиться

3 ответа

Проблема в том, что для json.load вы должны передать файл как объект с определенной функцией read. Поэтому либо вы используете json.load(reponse) , либо json.loads(response.read()) .

122
ответ дан kosii 23 August 2018 в 18:46
поделиться

Если вы получаете такую ​​ошибку python, как это:

AttributeError: 'str' object has no attribute 'some_method'

Вы, вероятно, случайно отравили свой объект, перезаписав свой объект строкой.

Как воспроизвести эту ошибку в python с несколькими строками кода:

#!/usr/bin/env python
import json
def foobar(json):
    msg = json.loads(json)

foobar('{"batman": "yes"}')

Запустите его, который печатает:

AttributeError: 'str' object has no attribute 'loads'

Но измените имя variablename, и он отлично работает:

#!/usr/bin/env python
import json
def foobar(jsonstring):
    msg = json.loads(jsonstring)

foobar('{"batman": "yes"}')

Эта ошибка возникает, когда вы пытались запустить метод внутри строки. Строка имеет несколько методов, но не тот, который вы вызываете. Поэтому перестаньте пытаться вызвать метод, который String не определяет, и начать искать, где вы отравили ваш объект.

5
ответ дан Eric Leschinski 23 August 2018 в 18:46
поделиться
AttributeError("'str' object has no attribute 'read'",)

Это означает, что именно это говорит: что-то пыталось найти атрибут .read для объекта, который вы ему дали, и вы дали ему объект типа str (т. е. вы дали ему строку) .

Ошибка произошла здесь:

json.load (jsonofabitch)['data']['children']

Ну, вы нигде не ищете read, поэтому это должно произойти в функции json.load, которую вы вызывали ( как указано в полном обзоре). Это потому, что json.load пытается .read то, что вы ему дали, но вы дали ему jsonofabitch, который в настоящее время называет строку (которую вы создали, вызвав .read на response).

Решение: не вызывайте .read самостоятельно; функция будет делать это и ожидает, что вы дадите ему response напрямую, чтобы он мог это сделать.

Вы могли бы также понять это, прочитав встроенную документацию Python для функции (попробуйте help(json.load) или для всего модуля (попробуйте help(json)) или проверите документацию для этих функций на http://docs.python.org .

12
ответ дан Karl Knechtel 23 August 2018 в 18:46
поделиться
Другие вопросы по тегам:

Похожие вопросы: