2016-11-19 83 views
0

我有像下面(其實際上嵌套JSON)的字符串,從字符串從一個特定的位置蟒刪除一個子

{「一個」:「X」,「B」:1,「c」的: 「{ 」一個「: 」X「, 」b「:1, 」C「: 」{「 一個 」:「 X」, 「b」:1, 「C」: 「XA」} 「}」 }

,我試圖提取字符串(粗體文本)的特定部分。而且,「xa」可以是另一個嵌套的json對象。

所以,條件總是我需要提取的9號發生後字符串的一部分「(引號)直到的最後一次出現之前」。

我已經試過這

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) 

它讓我從串子,但是,因爲我的「「」所有「」」從整個字符串被刪除拆分字符串。所以,我得到的結果就像這樣 - {a:x,b:1,c:{a:x,b:1,c:xa}}並且我需要子字符串 - {「a」:「x 「,」b「:1,」c「:」{「a」:「x」,「b」:1,「c」:「xa」}「},否則它不會是有效的json對象,我不能在字符串上使用json.loads。

我記得在其他編程語言之前這樣做,VB,甚至Oracle存儲過程,基本上我用SUBSTR和INSTR函數的組合。任何想法如何在python中實現?

+0

你應該大概是第一次使用JSON庫解析JSON字符串:json.loads(「{‘一’...「}」) –

回答

0

你有一個JSON 字符串。我沒有說JSON字符串,因爲你的嵌套元素包含"{}",這使得JSON格式無效。爲了將其轉換爲有效的JSON格式,您需要分別將其替換爲{}。然後你可以使用json模塊來實現你想要的。對於轉換JSON字符串與dict /列表,你可以使用json.loads()這裏是例子:

>>> 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} 

如果您想再次在字符串格式的這個數據,你可以使用json.dumps()爲:

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

謝謝你,我被困在擺脫的」,但用‘{和}’做了招。 – DnP

0

如果你真的真的真的需要自己來處理這條線(而不是@ yohann.marineau的評論表明,它有專門的數據庫來解析JSON),你可以嘗試一些好吃的東西regular expressions

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)) 

這裏[^"]裝置任何符號但"{9}裝置恰好9倍.手段任何符號*意味着零次或多次,括號用於標記組。

相關問題