Не можете использовать объект типа stdClass в качестве массива?

Существует значительная проблема с некоторыми из ответов, опубликованных до сих пор: unicode() декодирует кодировку по умолчанию, которая часто является ASCII; на самом деле, unicode() пытается сделать «смысл» байтов, которые он задает, преобразуя их в символы. Таким образом, следующий код, который по сути является тем, что рекомендуется в предыдущих ответах, не работает на моей машине:

# -*- coding: utf-8 -*-
author = 'éric'
print '{0}'.format(unicode(author))

дает:

Traceback (most recent call last):
  File "test.py", line 3, in <module>
    print '{0}'.format(unicode(author))
UnicodeDecodeError: 'ascii' codec can't decode byte 0xc3 in position 0: ordinal not in range(128)

Ошибка возникает из-за того, что author не содержит только ASCII-байты (т. е. со значениями в [0; 127]), а unicode() по умолчанию декодирует из ASCII (на многих машинах).

Надежное решение должно явно указывать кодировка, используемая в ваших полях; взяв UTF-8 в качестве примера:

u'{0} in {1}'.format(unicode(self.author, 'utf-8'), unicode(self.publication, 'utf-8'))

(или без начального u, в зависимости от того, хотите ли вы результат Unicode или байтовую строку).

При этом то можно подумать о том, что поля author и publication являются строками Unicode, а не декодировать их во время форматирования.

474
задан Donald Duck 16 November 2018 в 12:22
поделиться

1 ответ

Для получения массива как результата строки json, необходимо установить второй параметрический усилитель как верную булевскую переменную.

$result = json_decode($json_string, true);
$context = $result['context'];

Иначе $result будет объектом станд. но можно получить доступ к значениям как к объекту.

  $result = json_decode($json_string);
 $context = $result->context;
0
ответ дан 22 November 2019 в 22:39
поделиться
Другие вопросы по тегам:

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