Извлечение имен из файла JSON

Мне нужно было передать некоторый параметр моему методу для повторения и получить значение результата; так что мне нужно выражение .. Я создаю этот класс, который выполняет эту работу (она вдохновлена ​​на LBushkin's), вы можете использовать ее следующим образом:

static void Main(string[] args)
{
    // one shot
    var res = Retry<string>.Do(() => retryThis("try"), 4, TimeSpan.FromSeconds(2), fix);

    // delayed execute
    var retry = new Retry<string>(() => retryThis("try"), 4, TimeSpan.FromSeconds(2), fix);
    var res2 = retry.Execute();
}

static void fix()
{
    Console.WriteLine("oh, no! Fix and retry!!!");
}

static string retryThis(string tryThis)
{
    Console.WriteLine("Let's try!!!");
    throw new Exception(tryThis);
}

public class Retry<TResult>
{
    Expression<Func<TResult>> _Method;
    int _NumRetries;
    TimeSpan _RetryTimeout;
    Action _OnFailureAction;

    public Retry(Expression<Func<TResult>> method, int numRetries, TimeSpan retryTimeout, Action onFailureAction)
    {
        _Method = method;
        _NumRetries = numRetries;
        _OnFailureAction = onFailureAction;
        _RetryTimeout = retryTimeout;
    }

    public TResult Execute()
    {
        TResult result = default(TResult);
        while (_NumRetries > 0)
        {
            try
            {
                result = _Method.Compile()();
                break;
            }
            catch
            {
                _OnFailureAction();
                _NumRetries--;
                if (_NumRetries <= 0) throw; // improved to avoid silent failure
                Thread.Sleep(_RetryTimeout);
            }
        }
        return result;
    }

    public static TResult Do(Expression<Func<TResult>> method, int numRetries, TimeSpan retryTimeout, Action onFailureAction)
    {
        var retry = new Retry<TResult>(method, numRetries, retryTimeout, onFailureAction);
        return retry.Execute();
    }
}

ps. решение Л.Бушкина делает еще один повтор = D

-2
задан MPA 15 January 2019 в 10:11
поделиться

2 ответа

Ошибка из-за того, что вы не обращаетесь к словарному ключу 'playlists'

for plst in playlist['playlists']:
    print(plst['name'])

# Piano
0
ответ дан Eran Moshe 15 January 2019 в 10:11
поделиться

Вы перебираете не тот объект.

Не забывайте, что json.loads(json_data) возвращает объект, как он хранится. В вашем случае это диктат только с одним элементом: 'playlist'. Вы должны получить доступ к этому элементу с помощью loaded_json['playlist'], а затем перебрать список воспроизведения.

Здесь loaded_json относится к типу Dict[List[Dict]]. Будьте осторожны с JSON и вложенными структурами данных.

Попробуйте:

loaded_json= json.loads(json_data)       #type: Dict[List[dict]]
for playlist in loaded_json['playlist']: #type: dict
    print('{}\n'.format(playlist['name']))

Сделав это, вы получите название всего списка воспроизведения.

Документация: Кодер и декодер JSON

0
ответ дан Dorian Turba 15 January 2019 в 10:11
поделиться
Другие вопросы по тегам:

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