如何使用PHP解析NSDictionary数组

时间:2013-01-11 15:03:38

标签: php objective-c arrays titanium nsdictionary

我正在使用Appcelerator Titanium构建应用。它具有照片上传功能,因此我构建了一个PHP后端(CodeIgniter + RESTful Server)来处理上传的文件。由于Titanium从照片中删除了EXIF数据,因此我使用myMedia module获取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解析来处理这个数组,但它们都没有实际工作。我不知道如何解析这个数组。

提前致谢!

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

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

答案 2 :(得分: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中编码,因此很难开始,但毕竟解决方案非常简单。