我无法检索存储在Maya的中的确切JSON字符串转储(json.dumps
)fileInfo
。
>>> import pymel.core as pc
>>> json.dumps({'foo': 123})
'{"foo": 123}'
>>> pc.fileInfo['foo'] = json.dumps({'foo': 123})
>>> pc.fileInfo['foo']
u'{\\"foo\\": 123}'
>>> json.loads(pc.fileInfo['foo']) # this produces an error because of the escape sequence
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "c:\Program Files\Autodesk\Maya2011\bin\python26.zip\json\__init__.py", line 307, in loads
File "c:\Program Files\Autodesk\Maya2011\bin\python26.zip\json\decoder.py", line 319, in decode
File "c:\Program Files\Autodesk\Maya2011\bin\python26.zip\json\decoder.py", line 336, in raw_decode
File "c:\Program Files\Autodesk\Maya2011\bin\python26.zip\json\scanner.py", line 55, in iterscan
File "c:\Program Files\Autodesk\Maya2011\bin\python26.zip\json\decoder.py", line 171, in JSONObject
ValueError: Expecting property name: line 1 column 1 (char 1)
问题在于,当Maya存储值时,它可以确保正确地对其进行转义。但是,当检索到此字符串时,其格式错误json.loads
。我怎样才能解决这个问题?
什么我基本上找的东西,取消转义梅尔介绍,同时节省价值转义序列?到目前为止,我还没有找到任何能做到这一点的东西。
MEL与C有很多相似之处,因此如上所述,转义序列与C几乎相同。
@theodox的答案可能是正确的。但是,如果您知道json字符串将被转义。您可以简单地使用来获取字符串的原始未转义版本。
mystring.decode('unicode_escape')
因此,在上述情况下,反序列化存储信息的正确方法是:
json.loads(pc.fileInfo['foo'].decode('unicode_escape'))
它看起来很难看,因此可以将其包含在函数中。
def safe_json_loads(str):
return json.loads(str.decode('unicode_escape'))
data = safe_json_loads(pc.fileInfo['foo'])
干杯,
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句