如何将JavaScript字典转换为Python语法
从启用了如何将JavaScript字典转换为Python语法,javascript,python,Javascript,Python,从启用了javascript的应用程序(如Adobe)内部将javascript字典写入外部.jsx文件(使用dict.toSource())生成的字典的上下文如下所示: ({one:"1", two:"2"}) (请注意,编写字典键是因为它们是变量名(这不是真的)。 下一步是用Python读取这个.jsx文件。我需要找到一种方法将({one:“1”,two:“2”})转换为Python字典语法,例如: {'one':"1", 'two':"2"} 已经有人建议不要使用JavaScript的
javascript
的应用程序(如Adobe)内部将javascript
字典写入外部.jsx文件(使用dict.toSource()
)生成的字典的上下文如下所示:
({one:"1", two:"2"})
(请注意,编写字典键是因为它们是变量名(这不是真的)。
下一步是用Python读取这个.jsx文件。我需要找到一种方法将({one:“1”,two:“2”})转换为Python字典语法,例如:
{'one':"1", 'two':"2"}
已经有人建议不要使用JavaScript
的内置dict.toSource()
使用JSON
会更有意义,它将编写类似于Python
语法的词典内容。但不幸的是,使用JSON
对我来说不是一个选项。我需要找到一种方法将({one:“1”,two:“2”)转换成{code>{one':“1”,“two':“2”}
单独使用Python。对如何实现这一点有什么建议吗?再一次,问题主要出在字典键语法中,Python内部看起来像变量名,而不是像字典键名那样的字符串:
one vs "one"
稍后编辑:
以下是从JaveScript
内部导出的JavaScript
字典所产生的output.txt文件的内容。目标是将output.txt文件的内容读入Python并将其转换为Python字典。
请记住,字典就这么简单。在现实世界中,它将是一个兆字节长,有许多嵌套的键/值
同样,output.txt的内容:
({one:"1", two:"2"})
我们需要将其转换为Python语法字典(如果在Python中使用JSON,则可以使用JSON):
对于不包含封闭对象的普通对象,这是一个基本的字符串操作问题
一旦有了复合对象,我将向您展示的代码就会失败
让我们启动Python 2.7并使用您的示例字符串:
>x='({1:1,2:2})
现在你想要的是一份口述
我们对迪克特了解多少
dict可以从(key,value)“2-ples”列表中生成,我指的是两个元素列表的列表,而不是python元组只读列表的列表
每个元组都表示一个属性,如one:“1”
首先,我们需要将x缩减为包含所需信息的子字符串
显然,括号和方括号是多余的,因此我们可以写:
>>> left = x.find("{")
>>> right = x.find("}")
>>> y = x[left+1:right]
这里,String.find()
方法查找搜索字符串参数的第一个索引
符号x[n:m]
是x的第n个字符到第m-1个字符(含)的子字符串
获得:
>>> y
'one:"1", two:"2"'
>>> z
['one:"1"', ' two:"2"']
这只是一个字符串,不是一个元组,但如果我们用逗号分割,它可以成为一个元组
>>> z = y.split(",")
获得:
>>> y
'one:"1", two:"2"'
>>> z
['one:"1"', ' two:"2"']
现在,这些字符串中的每一个都代表一个属性,我们需要梳理出键和值
我们可以用一个简单的方法来实现这一点
>>> zz = [ (s[0:s.find(":")].strip(),s[s.find('"')+1:-1].strip()) for s in z]
我们再次使用find()
获取冒号和引号的索引
在这里,我们还使用strip()来去除将悄悄进入的空白
此步骤获得:
>>> zz
[('one', '1'), ('two', '2')]
这几乎就是我们想要的
现在
d=dict(zz)
就这样
>>> d
{'two': '2', 'one': '1'}
请注意,dict不保留键的顺序。对于不包含封闭对象的普通对象,这是一个基本的字符串操作问题
一旦有了复合对象,我将向您展示的代码就会失败
让我们启动Python 2.7并使用您的示例字符串:
>x='({1:1,2:2})
现在你想要的是一份口述
我们对迪克特了解多少
dict可以从(key,value)“2-ples”列表中生成,我指的是两个元素列表的列表,而不是python元组只读列表的列表
每个元组都表示一个属性,如one:“1”
首先,我们需要将x缩减为包含所需信息的子字符串
显然,括号和方括号是多余的,因此我们可以写:
>>> left = x.find("{")
>>> right = x.find("}")
>>> y = x[left+1:right]
这里,String.find()
方法查找搜索字符串参数的第一个索引
符号x[n:m]
是x的第n个字符到第m-1个字符(含)的子字符串
获得:
>>> y
'one:"1", two:"2"'
>>> z
['one:"1"', ' two:"2"']
这只是一个字符串,不是一个元组,但如果我们用逗号分割,它可以成为一个元组
>>> z = y.split(",")
获得:
>>> y
'one:"1", two:"2"'
>>> z
['one:"1"', ' two:"2"']
现在,这些字符串中的每一个都代表一个属性,我们需要梳理出键和值
我们可以用一个简单的方法来实现这一点
>>> zz = [ (s[0:s.find(":")].strip(),s[s.find('"')+1:-1].strip()) for s in z]
我们再次使用find()
获取冒号和引号的索引
在这里,我们还使用strip()来去除将悄悄进入的空白
此步骤获得:
>>> zz
[('one', '1'), ('two', '2')]
这几乎就是我们想要的
现在
d=dict(zz)
就这样
>>> d
{'two': '2', 'one': '1'}
请注意,dict不保留键的顺序。建议使用。这确实有效,似乎是一个更好的解决方案
import demjson
demjson.decode('{one:"1", two:"2"}')
产出:
{u'two': u'2', u'one': u'1'}
建议使用。这确实有效,似乎是一个更好的解决方案
import demjson
demjson.decode('{one:"1", two:"2"}')
产出:
{u'two': u'2', u'one': u'1'}
在使用JavaScript
时,我注意到其内置的.toSource()
方法将编写包含引号的键字典“
dict key name”
,如果该字典键的名称中包含非字母字符,如空格、逗号、句点、美元符号等。例如:
示例JavaScript
:
var dictVar = {'one':'1','.two':'2', 'three,':3, 'fo ur':4,"five":"five"};
mySaveFile = new File('/my/path/to/JavaDictToPython.txt');
mySaveFile.open("w","TEXT","????");
mySaveFile.write(dictVar.toSource());
mySaveFile.close();
字典将以以下方式写入文件:
({one:"1", ".two":"2", "three,":3, "fo ur":4, five:"five"})
在JavaScript
中工作时,我注意到它的内置.toSource()
方法将编写正确括在引号中的键字典“
dict key name”
,如果该字典键的名称中包含非字母字符,例如