如何从字节数组的JSON元素创建文件

时间:2017-06-14 08:05:52

标签: python json

我有一个JSON响应,如下所示:

{u'AllowExistingAttachmentToBeOverwritten': False,
 u'Name': u'Go-Daddy.pdf', 
 u'AttachmentData': u'JVBERi0xLjQKJdPr6eEKMSAwIG9iago8PC9DcmVhdG9yIChNb3ppbGxhLzUuMCBcKFdpbmR...
u'ItemIdAttachedTo': 91198711,
u'Description': u''}

如何将其转换为PDF文件?

我试过了:

with open(fileName, 'wb') as f:
    f.write(result['AttachmentData']) 
    f.close()

也尝试过:

with open(fileName, 'wb') as f:
    f.write(result['AttachmentData'].encode()) 
    f.close()

但在这两种情况下都创建了文件,但Adobe无法打开文件。

2 个答案:

答案 0 :(得分:1)

在大多数情况下,一旦从json文件接收到数据,就会在BASE64 UTF8中编码完全回答你的问题。为了能够获取它的内容或将其保存到磁盘,它应该是BASE64DECODED。

要在使用网站后复制您的情况(获取BASE64ENCODED PDF): http://jsfiddle.net/eliseosoto/JHQnk/

根据@ eran-s的建议,其中pdf_base64是从json响应中收到的pdf。

import base64
pdf_base64 = 'JVBERi0xLj...' 
with open('test.pdf', 'wb') as f:
    f.write(base64.b64decode(pdf_base64))
    f.close()

这个解决方案经过测试,效果很好。

有关更多信息,请参阅以下链接。 Embedding a File Attachment in JSON Object

答案 1 :(得分:0)

只需添加到@Zebromatz即可。您只需尝试将文件数据解码为base64。 在json中发送时也验证是否使用base64进行编码。 您可能的代码如下。

import base64

# bla bla bla
# bla bla bla

with open(fileName, 'wb') as f:
    f.write( base64.b64decode(result['AttachmentData']) )
    f.close()

看看这是否有效。