2017-12-20 9 views
1

가 나는 DB, 다음과 같은 형식으로 도착 문자열로 디코딩 및로드 할 필요 값 : 현재디코드 파이썬 JSON은

"[{u'date': 1508760000000, u'value': 0}, {u'date': 1509364800000, u'value': Decimal('5.989999771118164')}, {u'date': 1509969600000, u'value': Decimal('5.989999771118164')}, {u'date': 1510574400000, u'value': Decimal('9.579999923706055')}]" 

, 이것은 내가에서 사용하는 코드입니다

import pandas as pd 
import json 

#json for example: 
my_json="""[{u'date': 1508760000000, u'value': 0}, {u'date': 1509364800000, u'value': Decimal('5.989999771118164')}, {u'date': 1509969600000, u'value': Decimal('5.989999771118164')}, {u'date': 1510574400000, u'value': Decimal('9.579999923706055')}]""" 
my_json=my_json[1:-1] 
my_json=my_json.replace("u'","'") 
my_json=my_json.replace("'",'"') 
my_json=my_json.replace('Decimal("','') 
my_json=my_json.replace('")','') 
my_json=my_json.replace(', {','~ {') 
my_json_list=my_json.split('~') 
my_dict_list=[json.loads(row) for row in my_json_list] 
df=pd.DataFrame(my_dict_list) 

더 짧고 세련된 방법으로 이것을 수행 할 수 있습니까? 나는이 문제를 해결할 것이라고 생각

str(u'date') 
'date' 

:

+5

문자열은 유효한'json'하지 않습니다. –

+5

그 문자열은 어디에서 왔습니까? 'dict'의 파이썬'list'의'print' (각 문자열 앞의'u'는 유니 코드 문자열을 의미합니다)로부터 복사 된 것으로 보이며 실제로 유효한 JSON이 아닙니다. – Galen

+2

문자열을'ast '로 리터럴 구조로 변환 할 수 있습니다 : 'import ast; ast.literal_eval (string)'하지만 귀하의 경우에는 Decimal 객체가 있고 작동하지 않지만 문제를 해결하는 [answer] (https://stackoverflow.com/a/18178379/3540693)을 확인할 수 있습니다. – Pentux

답변

6

을 사용하면 사용자가 제공 한 eval

from decimal import * 
df = pd.DataFrame(eval(my_json)) 

      date    value 
0 1508760000000     0 
1 1509364800000 5.989999771118164 
2 1509969600000 5.989999771118164 
3 1510574400000 9.579999923706055 
+2

'from decimal import *'는 영리합니다.) – jezrael

+1

'from decimal import Decimal'은 충분하지만이 문자열을 데이터로 가져와야합니다. 받아쓰기 목록 ... –

+0

@JohannesReichard 나는 당신을 얻지 못했습니다. 그 팬더 질문 이후로 나는 모든 OP가 기대되는 것은 데이터 프레임을 출력물로 얻는 것이라고 생각한다. 그리고 부분 문자열 만 보았을 때 이후의 문제를 피하기 위해 모든 것을 가져 왔습니다. – Dark

0

는 u는 유니 코드를 의미 - -하지만 아스키 기반의 모든 문자가있는 경우 그냥 캐스팅 str()를 사용할 수있는 영어처럼, 여기에 그 출력 . 이 목록을 시작으로

+0

하지만'str ​​("u'date '")'는 여전히''u'date' "'입니다. – tripleee

+0

파이썬 2.7에서 str ("u'date '")를 시도한 것은 단지'date '입니다 – ddor254

+1

그렇다면 파이썬 2.7이 아니거나 정확하게 테스트하지 않았을 것입니다. https://ideone.com/85vV8K – tripleee