2015-04-24 52 views
0

我有使用類似於此代碼AS3創建的文件:閱讀ActionScript3的壓縮JSON在Python

var jsonString : String; 
var jo : Object = JSON.parse(jsonString); 
var data : ByteArray = new ByteArray; 
data.writeObject(jo); 
data.compress(); 

我不能改變這個代碼,我知道程序中使用這樣的事情上保存JSON文件磁盤採用壓縮和序列化二進制格式。

如何在Python中使用內部json作爲純文本創建純文本文件?

我可以用這個代碼解壓:

outPutFile = open(filenameOutput, "wb") 
data = zlib.decompress(open(filename, "rb").read()) 
outPutFile.write(data) 

,但我不知道如何反序列化。我讀了一些關於AMF的內容,但我真的很喜歡這個東西。

+0

沒有辦法,我嘗試使用PyPI沒有成功。我將製作一個AS3程序將JSON轉換爲純文本並存儲它。 –

回答

1

沒有「actionscript3壓縮的JSON」這樣的東西。

數據來自JSON的事實本來是無關緊要的;它存儲在AMF,這是重要的。 AMF沒有壓縮JSON。它甚至不處理與JSON相同的數據類型(雖然它幾乎包含所有JSON數據類型作爲子集)。

Adob​​e發佈了一個AMF規範(或者至少對於AMF3,你已經得到的版本),所以你可以閱讀規範並編寫你自己的AMF解串器。

但你不必; PyPI和其他地方已經有用於AMF的解析器。我不知道哪一個最適合您的使用,並且StackOverflow不是一個好的地方,無論如何都可以爲特定的庫找到建議,但是您可以搜索PyPIGoogle

0

您在該代碼中的任何地方都沒有使用AMF +在這種情況下,AMF將毫無用處,因爲它對於http通信非常有用。

Json是一種通用格式,AS3確實創造了這一點。關於閱讀Json使用AS3製作的內容沒有什麼特別的。

這就是說你顯示的代碼不會保存Json格式的數據,但它的AS3分析值(json轉換爲AS3 Object/Array)。代碼應該保存的是一個包含變量「jsonString」內容的txt文件。相反,您的代碼使用該字符串創建AS3解析對象,然後將它們保存爲二進制文件。這與你想要的完全相反。如果如你所說你不能改變代碼,那麼Python將永遠無法讀取和解析充滿AS3對象的二進制文件。

唯一的解決方案似乎是將這些文件加載​​到AS3應用程序中,然後將這些對象轉換回簡單的json字符串並保存爲txt文件。然後Python將能夠讀取它。

+0

我不同意。 [writeObject()的文檔有一個語句,那就是:](http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/utils/ByteArray.html#writeObject%28%29) 「_以** AMF **序列化格式將對象寫入字節數組._」 – null