Python flask json с использованием уже отформатированной строки [duplicate]

Мне тоже было нужно это, но, основываясь на этом потоке, я решил, что это невозможно, используя только модуль io Python 2. Хотя это нарушает правило «Специальное лечение для file», метод, с которым я пошел, заключался в создании чрезвычайно тонкой обертки для file (код ниже), который затем можно было бы обернуть в io.BufferedReader, что, в свою очередь, может быть передается конструктору io.TextIOWrapper. Это будет болью для модульного теста, поскольку, очевидно, новый код не может быть протестирован на Python 3.

Кстати, причина, по которой результаты open() могут быть переданы непосредственно на io.TextIOWrapper в Python 3 - это потому, что двоичный режим open() фактически возвращает экземпляр io.BufferedReader для начала (по крайней мере, на Python 3.4, где я тестировал в то время).

import io
import six  # for six.PY2

if six.PY2:
    class _ReadableWrapper(object):
        def __init__(self, raw):
            self._raw = raw

        def readable(self):
            return True

        def writable(self):
            return False

        def seekable(self):
            return True

        def __getattr__(self, name):
            return getattr(self._raw, name)

def wrap_text(stream, *args, **kwargs):
    # Note: order important here, as 'file' doesn't exist in Python 3
    if six.PY2 and isinstance(stream, file):
        stream = io.BufferedReader(_ReadableWrapper(stream))

    return io.TextIOWrapper(stream)

По крайней мере, это мало, поэтому, надеюсь, это минимизирует экспозицию для деталей, которые не могут быть легко протестированы.

238
задан altocumulus 20 November 2015 в 13:36
поделиться

4 ответа

json.loads()

import json

d = json.loads(j)
print d['glossary']['title']
469
ответ дан David Leon 24 August 2018 в 07:29
поделиться

Если вы доверяете источнику данных, вы можете использовать eval для преобразования вашей строки в словарь:

eval(your_json_format_string)

Пример:

>>> x = "{'a' : 1, 'b' : True, 'c' : 'C'}"
>>> y = eval(x)

>>> print x
{'a' : 1, 'b' : True, 'c' : 'C'}
>>> print y
{'a': 1, 'c': 'C', 'b': True}

>>> print type(x), type(y)
<type 'str'> <type 'dict'>

>>> print y['a'], type(y['a'])
1 <type 'int'>

>>> print y['a'], type(y['b'])
1 <type 'bool'>

>>> print y['a'], type(y['c'])
1 <type 'str'>
4
ответ дан kakhkAtion 24 August 2018 в 07:29
поделиться

использовать simplejson или cjson для ускорения

import simplejson as json

json.loads(obj)

or 

cjson.decode(obj)
15
ответ дан locojay 24 August 2018 в 07:29
поделиться

Когда я начал использовать json, я был смущен и не смог разобраться в нем некоторое время, но, наконец, я получил то, что хотел. Вот простое решение

import json
m = {'id': 2, 'name': 'hussain'}
n = json.dumps(m)
o = json.loads(n)
print o['id'], o['name']    
71
ответ дан Sungguk Lim 24 August 2018 в 07:29
поделиться
Другие вопросы по тегам:

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