0

AppceleratorTitaniumを使用してアプリを作成しています。写真のアップロード機能があるので、アップロードされたファイルを処理するためのPHPバックエンド(CodeIgniter + RESTfulサーバー)を構築しました。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データを返すことがわかりました。

この配列を処理するためにいくつかのPHPPlist解析を試しましたが、実際にはどれも機能しません。この配列を解析する方法がわかりません。

前もって感謝します!

4

3 に答える 3

0

モジュールから結果を取得し、それを文字列に変換します。文字列をサーバーに渡してJSONに変換し直します...私はPHPの人ではありませんが、PHPでJSONを解析する方法があると思いますか?

于 2013-01-11T16:17:59.513 に答える
0

これは古いスタイルのASCIIプロパティリストのようです。この形式のパーサーは、もはや交換に使用されることはほとんどないため、おそらく見つかりません。これを解析できるのはApple独自のライブラリだけであり、この不気味な古い形式をサポートしているのかどうかはわかりません。これはおそらくNSDictionaryのdescription方法から得たものであり、この目的を目的としたものではありません。サーバーに投稿するためのデータを準備するには、最初にNSJSONSerializationを実行して、それを送信します。次に、通常のJSONを処理します。(NSPropertyListSerializationを介して実行し、見つかったplistライブラリを使用することもできますが、両方のオプションを指定すると、なぜそれを選択するのかわかりません。)

于 2013-01-11T18:15:23.120 に答える
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 に答える