0

サーバーとの間でデータを送受信するには、iOSアプリケーションでjsonを使用する必要があります。問題は、jsonファイルがどのように表示されるかについて少し混乱していることです。サーバーに送信するjsonファイルは次のようになります。

NSString *jsonString = @"{\"eventData\":{\"eventDate\":\"Jun 13, 2012 12:00:00 AM\",\"eventLocation\":{\"latitude\":43.93838383,\"longitude\":-3.46},\"text\":\"lalalala\",\"imageData\":\"raw data\",\"imageFormat\":\"JPEG\",\"expirationTime\":1339538400000},\"type\":\"ELDIARIOMONTANES\",\"title\":\"accIDENTE\"}";

これをコンソールで印刷しようとすると、次のようになります。

jsonString: {"eventData":{"eventDate":"Jun 13, 2012 12:00:00 AM","eventLocation":{"latitude":43.93838383,"longitude":-3.46},"text":"lalalala","imageData":"raw data","imageFormat":"JPEG","expirationTime":1339538400000},"type":"ELDIARIOMONTANES","title":"accIDENTE"}

オンラインのjsonバリデーターによると、これは有効なjson形式のようです。

ただし、Webを検索した後、そしてもちろんstackoverflowを実行した後、これについて別の質問をした後、上記のNSStringを次のようなjsonファイルに変換する必要があることがわかりました。

NSString *jsonString = @"{\"eventData\":{\"eventDate\":\"Jun 13, 2012 12:00:00 AM\",\"eventLocation\":{\"latitude\":43.93838383,\"longitude\":-3.46},\"text\":\"lalalala\",\"imageData\":\"raw data\",\"imageFormat\":\"JPEG\",\"expirationTime\":1339538400000},\"type\":\"ELDIARIOMONTANES\",\"title\":\"accIDENTE\"}";

    NSData *jsonData = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
    NSError *e;
    NSMutableArray *jsonList = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingMutableContainers error:&e];

しかし、jsonList変数を出力しようとすると、json形式/ファイルになると思いました。これを取得します。

jsonList: {
    eventData =     {
        eventDate = "Jun 13, 2012 12:00:00 AM";
        eventLocation =         {
            latitude = "43.93838383";
            longitude = "-3.46";
        };
        expirationTime = 1339538400000;
        imageData = "raw data";
        imageFormat = JPEG;
        text = lalalala;
    };
    title = accIDENTE;
    type = ELDIARIOMONTANES;
}

これは有効なjsonファイルではありません!!!! だから私の質問は、もし私が最初から私のjsonファイルに正しいフォーマットを持っていたのなら、なぜこの余分なコードすべてがそれをjsonに「変換」するのですか?私はここで何かが欠けているか、コードの機能を誤解しているに違いないと思います。私の投稿を読んでくれてありがとう:)

4

2 に答える 2

1

あなたが見ているのは正しい振る舞いです:

jsonList変数を出力しようとすると、json形式/ファイルになると思いました

変数jsonListはですNSMutableArray。この-JSONObjectWithDataメソッドは、JSON文字列ではなくObjective-Cオブジェクト(Core Foundationオブジェクト)を返します。JSON文字列を解析し、そのJSONデータを表すオブジェクトを返しました。

于 2012-06-25T09:01:33.793 に答える
1

少し結び目ができていると思います:-)送信したいデータを正確に含むNSStringがある場合は、JSONObjectWithDataなどを使用しても意味がありません。持っている文字列を送信するだけでもかまいません。すでに。

ただし、サーバーからJSONとして受信しているデータのビットを抽出する場合は、それらのメソッドを使用する必要があります。解析されたJSONオブジェクトからデータを取得する方がはるかに簡単で信頼性が高く、古いプレーンなJSON文字列だけです(正規表現はJSONからデータを抽出するための良い方法ではありません)。

もう1つのケースは、大きくて複雑なJSONオブジェクトをコードで構築し、それをJSON文字列としてサーバーに送信する場合です。NSStringsを一緒に追加してこれを試してはいけません(すぐに厄介になります)。データをNSMutableArraysまたはNSDictionariesにしてから、JSONに変換することをお勧めします。

これの簡単な例を次に示します(ここから)

NSDictionary *data = [NSDictionary dictionaryWithObjectsAndKeys:@"test@test.com", @"user",@"mypass", @"pass", nil];

NSError *error = nil;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:data options:NSJSONWritingPrettyPrinted error:&writeError];

NSString *jsonString = [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding];
NSLog(@"JSON Output: %@", jsonString);
于 2012-06-25T09:11:03.823 に答える