首页 > 解决方案 > 如何解释/导出大型 plist 数据

问题描述

我有大约 60K 行代码(每个 BBEdit)的 plist 文件,我正在尝试解码保存在这些文件中的一些数据点。我购买该软件的数据库公司不会将我的数据转换为我可以与竞争对手的产品一起使用的另一种格式(CSV 或其他格式),他们不会在内部进行转换并将导出的数据发送给我。我已经开始检查并更改一个值,然后查看 plist 并查看更改的位置,我试图弄清楚是否有办法找出整数引用的内容?我搜索了有关 Plists 如何工作的信息,似乎整数值引用了 plist 文档中较早的某个地方,但由于我没有编写这个程序,我也无法访问源代码或任何帮助公司,我 我将不得不对此进行逆向工程,以便我可以导出我感兴趣的数据点,因为我想保存大约 100K 值。皇家皮塔饼,但你有它。CF$UID 似乎是核心基金会的唯一标识符,但这就是我所拥有的。任何建议都是最有帮助的。

<dict>
    <key>$archiver</key>
    <string>NSKeyedArchiver</string>
    <key>$objects</key>
    <array>
    ...some 30-40K lines later
    <dict>
        <key>$class</key>
        <dict>
            <key>CF$UID</key>
            <integer>153</integer>
        </dict>
        <key>stringValue</key>
        <dict>
            <key>CF$UID</key>
            <integer>24</integer>   <--- this is the value that's changing for my particular data point I'm interested in.
        </dict>

......等等等等,然后在最后,像这样。

    </array>
    <key>$top</key>
    <dict>
        <key>root</key>
        <dict>
            <key>CF$UID</key>
            <integer>1</integer>
        </dict>
    </dict>
    <key>$version</key>
    <integer>100000</integer>
</dict>
</plist>

标签: xcodemacosplist

解决方案


看起来所做的是NSKeyedArchiver用于将 Objective-C 对象图序列化为 XML 格式的属性列表。如果没有此代码的源代码(或至少是头文件),这将是一个非常痛苦的过程。他们不会将其作为 CSV 提供给您的原因是这没有任何意义 - 这是一个深度嵌套的结构,它正在序列化应用程序的内存状态。

我的建议是要么放弃,要么给自己倒一杯烈性酒。这不打算由人类直接使用。


推荐阅读