2014-02-06 67 views
1

在Python中,提取包含JavaScript变量定义的行并获取分配给它的值的最简单方法是什么(我使用BeautifulSoup从网页中截取JavaScript),它包含在大括号(即{,}),请记住变量本身可能包含任何几层嵌套的大括号。在python中获取JSON var值

例如,与输入

var myVar = { "a": "123","b":"345", "c": {"c1":20,"c2":"c123", "c3": {"c3_1": {"c3_1_1":"12"}}}, "d":21, "e":["1","2"]} 

我想获得完整的myVar值作为string(因为我想将其转换为一个Python list后),

{ "a": "123","b":"345", "c": {"c1":20,"c2":"c123", "c3": {"c3_1": {"c3_1_1":"12"}}}, "d":21, "e":["1","2"]} 

任何帮助将是巨大的我是Python的新手。

回答

1

使用str.index寻找到JSON对象开始和re.sub(使"a": "123"a:"123")与str.replace的变化(单引号双引号的位置:['1','2'])修复JSON:

import json 
import re 

var = '''var myVar = { a: "123",b:"345", c: {c1:20,c2:"c123", c3: {c3_1: {c3_1_1:"12"}}}, d:21, e:['1','2']}''' 
v = var[var.index('{'):] 
v = re.sub(r'(\w*):', r'"\1":', v) 
v = v.replace('\'', '\"') 

>>> v 
'{ "a": "123","b":"345", "c": {"c1":20,"c2":"c123", "c3": {"c3_1": {"c3_1_1":"12"}}}, "d":21, "e":["1","2"]}' 
>>> json.loads(v) 
{u'a': u'123', u'c': {u'c3': {u'c3_1': {u'c3_1_1': u'12'}}, u'c2': u'c123', u'c1': 20}, u'b': u'345', u'e': [u'1', u'2'], u'd': 21} 
+0

谢谢,这似乎工作。很高兴有一个解释。 –

+0

嗯..当JSON对象中的'name'被引号包围(即{“a”:“123”...})时,这会产生错误。 –

+0

@ source.rar来自'json.loads'的错误?你测试了什么json字符串? – ndpu

1
import json 
a = json.dumps(myVar) 

变量a在本例中是字符串类型。你可以随意操纵它。

+0

我不打算使用JSON图书馆,但你能解释一下在这种情况下如何从文本中获得“var”? –

+0

随着'eval'你可以轻松做到 –

+0

你在问如何通过美丽的汤来获得myVar的价值吗? – jpavs