2016-11-19 5 views
0

Ich habe eine Zeichenfolge wie unter (es ist eigentlich eine verschachtelte json)Python eine Teilkette aus einer Zeichenkette aus einem bestimmten Position

{ "a" entfernen: "x", "b" 1, "c" : "{" a ":" x "," b ": 1," c ":" {"a": "x", "b": 1, "c": "xa"} "}" }

und ich versuche, einen bestimmten Teil der Zeichenfolge (fett formatierter Text) zu extrahieren. Und "xa" kann ein anderes verschachteltes json-Objekt sein.

Also die Bedingung ist immer ich muss den Teil der Zeichenfolge nach dem 9. Auftreten des "(Zitat-Zeichen) bis vor dem letzten Auftreten des" extrahieren.

Ich habe versucht, diese

newstr = '{"a":"x","b":1,"c":"{"a":"x","b":1,"c":"{"a":"x","b":1,"c":"xa"}"}"}' 
newstr2=newstr.split('"')[9:]+newstr.rsplit('"')[1:] 
newstr3 = ''.join(newstr2) 
print(newstr3) 

its me den Teil aus dem String zu geben, aber, da ich die Saite am Aufspalten von ‚„‘alle‚“‘ aus dem gesamten String entfernt werden. Also, das Ergebnis, das ich bekomme, ist wie folgt - {a: x, b: 1, c: {a: x, b: 1, c: xa}} und ich brauche die Teilzeichenfolge wie - {"a": "x "," b ": 1," c ":" {"a": "x", "b": 1, "c": "xa"} "}, andernfalls ist es kein gültiges json-Objekt und Ich kann json.loads nicht in der Zeichenfolge verwenden.

Ich erinnere mich, dies in anderen Programmiersprachen, VB und sogar Oracle gespeicherte Prozeduren zu tun, im Grunde habe ich eine Kombination von Substr und Instr Funktionen. Irgendeine Idee, wie dies in Python erreicht werden kann?

+0

sollten Sie:

>>> import json >>> json_string = json_string.replace('"{', '{').replace('}"', '}') >>> json_data = json.loads(json_string) # convert JSON string to python object >>> json_data['c'] # content of 'c' key in 'json_data' dict {u'a': u'x', u'c': {u'a': u'x', u'c': u'xa', u'b': 1}, u'b': 1} 

Wenn Sie diese Daten erneut im String-Format möchten, können Sie json.dumps() als verwenden wahrscheinlich benutze zuerst json library um die json string zu analysieren: json.loads ('{"a" ... "}') –

Antwort

0

Sie haben eine JSON wie Zeichenfolge. Ich habe die JSON-Zeichenfolge nicht angegeben, weil Ihre verschachtelten Elemente "{ und }" enthalten, wodurch das JSON-Format ungültig wird. Um es in ein gültiges JSON-Format zu konvertieren, müssen Sie diese durch { bzw. } ersetzen. Dann können Sie json Modul verwenden, um zu erreichen, was Sie wollen. Zur Umwandlung JSON-String/Liste dict, können Sie json.loads() verwenden Hier ist das Beispiel:

>>> json.dumps(json_data['c']) 
'{"a": "x", "c": {"a": "x", "c": "xa", "b": 1}, "b": 1}' 
+0

Vielen Dank. Ich war fest daran, das", aber ersetzende "loszuwerden Trick. – DnP

0

Wenn Sie wirklich wirklich wirklich selbst diese Zeile verarbeiten müssen (und analysiert es nicht mit eigener Bibliothek zu JSON als @ yohann.marineau in den Kommentaren schon sagt), können Sie einige regular expressions Leckereien versuchen:

import re 
s = '{"a":"x","b":1,"c":"{"a":"x","b":1,"c":"{"a":"x","b":1,"c":"xa"}"}"}' 
m = re.search(r'([^"]*"){9}(.*)"', s) 
print(m.group(2)) 

hier [^"] Mittel irgendein Symbol aber ", {9} bedeutet genau 9mal, . Mittel beliebiges Symbol, * bedeutet null oder mehr Male, Klammern werden verwendet, um Gruppen zu markieren.

Verwandte Themen