2013-03-07 10 views
11

Mam następujący ciąg, trzeba przekształcić go w liście bez U „”:python json wysypisk

my_str = "[{u'name': u'squats', u'wrs': [[u'99', 8]], u'id': 2}]" 

mogę pozbyć się "za pomocą

import ast 
str_w_quotes = ast.literal_eval(my_str) 

wtedy zrobić:

import json 
json.dumps(str_w_quotes) 

i dostać

[{\"id\": 2, \"name\": \"squats\", \"wrs\": [[\"55\", 9]]}] 

Czy istnieje sposób na pozbycie się ukośników? celem jest:

[{"id": 2, "name": "squats", "wrs": [["55", 9]]}] 
+2

'json.dumps' zwraca' '[{"id": 2, "name": "przysiady", "wrs": [["99", 8]]}]' 'dla mnie. –

+1

Czy na pewno widzisz ukośniki odwrotne, a nie tylko znaki ucieczki? Na przykład '' \ "" 'jest takie samo jak' '' ''. –

+0

'U' wskazuje tylko, że jest to ciąg znaków Unicode w pythonie <3.0. Czy na pewno chcesz przekonwertować na proste ciągi? – Tim

Odpowiedz

3
>>> "[{\"id\": 2, \"name\": \"squats\", \"wrs\": [[\"55\", 9]]}]".replace('\\"',"\"") 
'[{"id": 2, "name": "squats", "wrs": [["55", 9]]}]' 

uwaga, że ​​można po prostu zrobić to na oryginalnym ciąg

>>> "[{u'name': u'squats', u'wrs': [[u'99', 8]], u'id': 2}]".replace("u\'","\'") 
"[{'name': 'squats', 'wrs': [['99', 8]], 'id': 2}]" 
5

json.dumps uważa, że ​​" jest częścią łańcucha, nie jest częścią formatowanie json.

import json 
json.dumps(json.load(str_w_quotes)) 

powinno dać:

[{"id": 2, "name": "squats", "wrs": [["55", 9]]}] 
+0

nie działa – vikki

+0

'json.loads' powinien zrobić lewę dla ciągu znaków: –

+0

powinien to być' json.loads (json.dumps (str_w_quotes)) ' – webjunkie

9

To działa, ale nie wydaje się zbyt elegancki

import json 
json.dumps(json.JSONDecoder().decode(str_w_quotes)) 
1

Kroki wspomniałeś działa całkowicie w porządku dla mnie:

>>> import ast 
>>> str_w_quotes = ast.literal_eval(my_str) 
>>> str_w_quotes 
[{u'id': 2, u'name': u'squats', u'wrs': [[u'99', 8]]}] 
>>> import json 
>>> json.dumps(str_w_quotes) 
'[{"id": 2, "name": "squats", "wrs": [["99", 8]]}]' 

json.dumps zwraca wynik zgodnie z oczekiwaniami na, używam python 2.7

+0

Dlaczego dodajesz odpowiedź na 2-letnie pytanie, które nawet nie zaczynają odpowiadać na zadane pytanie? To naprawdę powinien być komentarz najwyżej. – Craicerjack