我认为该代码不适用于 MacOS 或 Ubuntu,因为 Apple 的 macOS 和 iOS .plist 文件不是JSON。他们遵循更多的 XML 格式,甚至在文档中这样说:
文件本身通常使用 Unicode UTF-8 编码进行编码,并且内容使用 XML 进行结构化。
在 Mac 或 Ubuntu 上运行代码:
import ujson
with open("Info.plist", 'r') as plist_as_file:
ujson.dumps(plist_as_file)
将导致:
Traceback (most recent call last):
File "test.py", line 4, in <module>
ujson.dumps(plist_as_file)
TypeError: <_io.BufferedReader name='Info.plist'> is not JSON serializable
如果由于某种原因,您可以成功打开 .plist 并且没有收到该错误,那么您所拥有的不是实际的 .plist 文件。open
无论文件模式是r
还是,错误都是一样的rb
。
你说你得到了:
TypeError: � is not JSON serializable
我认为这是同样的错误,但由于某种原因,它没有正确打印出来。所以,ujson
真的不是在这里使用合适的工具,而且它不是 Git 的问题。
Python 提供了一个用于读取/写入 .plist 文件的内置模块:plistlib。
它具有与(或)模块相同的dump
/dumps
和load
/loads
方法。json
ujson
import plistlib
with open("Info.plist", 'rb') as plist_as_file:
plist_data = plistlib.load(plist_as_file)
# The entire contents is stored as a dict
print(plist_data)
# Access specific content as a dict
print(plist_data["CFBundleShortVersionString"])
print(plist_data["UIMainStoryboardFile"])