我有一个像下面的字符串(它实际上是一个嵌套的json),
{"":" X"" B":1," C":"的 { "":" X"" b":1," C":" {"&#34 ;:" X"" b":1," C":" XA"}"} & #34;}
我试图提取字符串的特定部分(粗体文本)。而且," 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&# 34;:" X"" b":1," C":" {"":" x"," b":1," c":" xa"}"},否则它不会有效json对象,我不能在字符串上使用json.loads。
我记得之前在其他编程语言,VB甚至Oracle存储过程中都这样做,基本上我使用了substr和instr函数的组合。知道如何在python中实现这一点吗?
答案 0 :(得分:0)
如果你真的真的需要自己处理这一行(而不是用@ yohann.marineau在评论中建议的专用库将其解析为JSON),你可以尝试一些regular expressions好东西:
[^"]
此处"
表示任何符号,但{9}
,.
表示正好9次,*
表示< em>任何符号,{{1}}表示零次或多次,括号用于标记组。
答案 1 :(得分:0)
您有一个类似字符串的JSON 。我没有说JSON字符串,因为您的嵌套元素包含"{
和}"
,这使得它成为无效的JSON格式。要将其转换为有效的JSON格式,您需要分别将其替换为{
和}
。然后你可以使用json
模块来实现你想要的。要将json字符串转换为dict / list,您可以使用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}'