【问题标题】:How to create a file from JSON element of array of bytes如何从字节数组的 JSON 元素创建文件
【发布时间】:2017-11-16 06:21:38
【问题描述】:

我的 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()

但在这两种情况下,文件都已创建,但 Adob​​e 无法打开该文件。

【问题讨论】:

标签: python json


【解决方案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

【讨论】:

  • @eran-s :我认为您可能需要根据Zebromatz 调用decode 函数而不是encode。尝试将行更改为f.write( base64.b64decode(result['AttachmentData']) )
【解决方案2】:

只需添加到@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()

看看这是否可行。

【讨论】:

  • 感谢您的详细解答。像魅力一样工作。
猜你喜欢
  • 2011-04-11
  • 1970-01-01
  • 1970-01-01
  • 2010-11-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-07
  • 2010-09-26
相关资源
最近更新 更多