0

我正在使用 Appcelerator Titanium 构建一个应用程序。它具有照片上传功能,因此我构建了一个 PHP 后端(CodeIgniter + RESTful Server)来处理上传的文件。由于 Titanium 会从照片中删除 EXIF 数据,因此我使用myMedia 模块来获取 EXIF 数据,因此我仍然可以将 EXIF 数据发布到 PHP 后端。

模块返回的数组如下所示:

{
exif =     {
    ApertureValue = "2.970853567123413";
    BrightnessValue = "5.906054496765137";
    ColorSpace = 1;
    ComponentsConfiguration =         (
        0,
        0,
        0,
        1
    );
    DateTimeDigitized = "2012:12:22 12:59:56";
    DateTimeOriginal = "2012:12:22 12:59:56";
    ExifVersion =         (
        2,
        2,
        1
    );
    ExposureMode = 0;
    ExposureProgram = 2;
    ExposureTime = "0.007936508394777775";
    FNumber = "2.799999952316284";
    Flash = 16;
    FlashPixVersion =         (
        1,
        0
    );
    FocalLenIn35mmFilm = 35;
    FocalLength = "3.849999904632568";
    ISOSpeedRatings =         (
        80
    );
    MeteringMode = 5;
    PixelXDimension = 2592;
    PixelYDimension = 1936;
    SceneCaptureType = 0;
    SensingMethod = 2;
    ShutterSpeedValue = "6.973695755004883";
    SubjectArea =         (
        1295,
        967,
        699,
        696
    );
    WhiteBalance = 0;
};
location =     {
    latitude = "52.51933333333334";
    longitude = "13.40083333333333";
};
path = "assets-library://asset/asset.JPG?id=E5040F0C-C86A-411B-ADA8-36C9EC91A526&ext=JPG";
}

我在互联网上进行了一些研究,以找出这是什么类型的数组,对我来说它似乎是一个 Plist (XML)。我查看了 myMedia 模块类,发现它使用 NSDictionary 类返回 EXIF 数据。

我尝试了一些 PHP Plist 解析来处理这个数组,但它们都没有真正起作用。我不知道如何解析这个数组。

提前致谢!

4

3 回答 3

0

我找到了解决方案!JSONkit解决了我的问题。Apple 自己的 JSON 库不起作用,它无法将 NSDictionary 对象转换为 JSON 字符串。

我在MyMediaModule.M中插入了这个字符串(在第 1473 行之后):

NSString *JSONMeta = [metadata JSONString];

然后我替换了第 1475 行:

//[dictionary setObject:dictMeta forKey:@"metadata"];
[dictionary setObject:JSONMeta forKey:@"JSONMeta"];

也不要忘记包含 JSONkit 库:

#import "JSONKit.h"

现在在 Appcelerator Titanium 中,只需使用event.JSONMeta而不是event.metadata

mymedia.openPhotoGallery({
    success:function(event)
    {
        Ti.API.info(event.JSONMeta);
    }
}

谢谢你的帮助!我从来没有用 Objective-C 写过代码,所以很难开始,但毕竟解决方案非常简单。

于 2013-01-12T09:42:54.993 回答
0

这似乎是一个老式的 ASCII 属性列表。您可能找不到这种格式的任何解析器,因为它几乎不再用于交换——AFAIK 唯一可以解析它的是 Apple 自己的库,我什至不确定它们是否支持这种破旧的旧格式。你可能从 NSDictionary 的description方法中得到了这个,它不是为此目的而设计的。为了准备发布到服务器的数据,首先通过 NSJSONSerialization 运行它并发送它。然后你将处理普通的 JSON。(您也可以通过 NSPropertyListSerialization 运行它并使用您找到的 plist 库,但是考虑到这两个选项,我不明白您为什么会选择那个。)

于 2013-01-11T18:15:23.120 回答
0

从模块中获取结果并将其转换为字符串。将字符串传递到您的服务器并将其转换回 JSON...我不是 php 人,但我猜有一种方法可以在 php 中解析 JSON?

于 2013-01-11T16:17:59.513 回答