2014-01-11 4 views
1

Это строка я получаю из запроса GET:не в состоянии разобрать JSON пост из JavaScript в Python

{'company_code': u'ha', 'from-date': u'', 'to-date': u'', 'ledger_type': u'CLNT', 'cost_center': u'ALL', 'margin': u'wtmg'} 

Теперь я совершенно запутался, что делать с этим. Я хочу, чтобы str ['company_code'] дал мне «ha» в качестве вывода.

Но даже если я выполняю json.dumps() или загружает() на него, я просто не могу получить к нему доступ.

Любая помощь?

Edit: После отправки строки JSON из яваскрипта клиента, и принимая json.dumps, я получаю это:

{"company_code": "ha", "from-date": "", "to-date": "", "ledger_type": "CLNT", "cost_center": "ALL", "margin": "wtmg"} 

который строку. Я не знаю, как идти дальше отсюда.

+0

Можете ли вы точно указать в своем вопросе, в каком направлении идут данные? Я предполагаю, что у вас есть клиент javascript и сервер python. Вы отправили данные в формате JSON с python на javascript, но вы не использовали 'json.dumps', и поэтому python выдает форматирование Unicode для специальных' u '"'. Это правильно? – Cilyan

ответ

1

Данная строка не является действительной JSON. Это похоже на результат repr.

>>> print(repr({'company_code': u'ha'})) 
{'company_code': u'ha'} 

JSON строка должна быть обернута в двойном qutoe ('"').

>>> print(json.dumps({'company_code': u'ha'})) 
{"company_code": "ha"} 

>>> import json 
>>> json.loads('"a"') 
u'a' 
>>> json.loads("'a'") 
Traceback (most recent call last): 
    File "<stdin>", line 1, in <module> 
    File "C:\Python27\lib\json\__init__.py", line 338, in loads 
    return _default_decoder.decode(s) 
    File "C:\Python27\lib\json\decoder.py", line 365, in decode 
    obj, end = self.raw_decode(s, idx=_w(s, 0).end()) 
    File "C:\Python27\lib\json\decoder.py", line 383, in raw_decode 
    raise ValueError("No JSON object could be decoded") 
ValueError: No JSON object could be decoded 

EDIT в соответствии с вопросом редактирования.

Использование json.loads для декодировать строку json, затем получить доступ к значению с помощью dict[key] синтаксис.

>>> encoded = '{"company_code": "ha", "from-date": "", "to-date": "", "ledger_type": "CLNT", "cost_center": "ALL", "margin": "wtmg"}' 
>>> decoded = json.loads(encoded) 
>>> decoded['company_code'] 
u'ha' 
+0

В любом случае я мог бы разобрать его? – Hick

+0

@Hick, вы можете использовать ['ast.literal_eval'] (http://docs.python.org/2/library/ast.html#ast.literal_eval) в Python:' decoded = ast.literal_eval (the_given_string) ' , Он будет работать до тех пор, пока он содержит только 'str',' unicode', 'int',' float', ... – falsetru

+0

Или, может быть, я могу попытаться отправить json из javascript-клиента. – Hick

Смежные вопросы