2016-11-19 79 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倍.手段任何符号*意味着零次或多次,括号用于标记组。

相关问题