2

IOSで実行しているWebサービスから受け取った単純なJSONを逆シリアル化したい。

@"[{\"NickName\":\"James Roeiter3\",\"TempId\":\"634783760669935686\",\"LDAP\":\"XUserName15\",\"SecToken\":null},{\"NickName\":\"James Roeiter2\",\"TempId\":\"634783760654574807\",\"LDAP\":\"XUserName16\",\"SecToken\":null}]" 

私はこれまで何度もこれを行ってきましたが、NSJsonSerializerとSTIGの両方を使用して逆シリアル化しようとしています。

NSArray* array1= (NSArray*)[jsonString JSONValue]; 

NSArray* array2 = (NSArray*)[NSJSONSerialization JSONObjectWithData:jsonString   options: NSJSONReadingMutableContainers error:&error];

今、問題は奇妙です。デバッガーからハードコードされた文字列にJSONをコピーして貼り付けて解析しようとすると、機能します。実行時に受け取った場合は失敗します。STIGはJSONを'[で開始できないと言います。 '。null文字(それが何であるかはよくわかりません)を探してすべての文字を調べてみましたが、すべての文字はコピー/貼り付けとランタイム文字列の間で同じように見えました。また、UTF8にフォーマットしてみて、フォーマットを少し試してみましたが、失敗しました。

それが何であるか、またはそれをどのように解決できるかについてのアイデアはありますか?私はこれにかなり固執しているので、私は本当にあなたの助けをここに適用します。これは単純な問題であると思われますが、私がこれを解決するまで進むことができません......

編集:私が受け取る正確なエラーはこれです:

2012-07-21 23:59:31.376 Whisper.Client.IOS[1058:fe03] Error : Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (No string key for value in object around character 1.) UserInfo=0xc9632e0 {NSDebugDescription=No string key for value in object around character 1.}

よろしくお願いします。

ジェームズ

4

1 に答える 1

4

問題は、エスケープ文字と引用文字\ "でした。これが、ハードコードとしてコピーアンドペーストすると、コンパイラが引用"文字のみを読み取るために機能した理由です。将来誰かがこの問題に遭遇した場合、これは非常に厄介になる可能性があります:問題はサーバーURLがデータをエンコードしたことです(C#サーバー側)、IOS urlデコードはその弱点で知られており、apprenltyは\"文字をから削除しませんストリング。

これは私の現在のIOSデコードコードでした:

json = [json stringByReplacingOccurrencesOfString:@"+" withString:@" "];
json = [json stringByReplacingPercentEscapesUsingEncoding:NSUTF8StringEncoding];
json = [json stringByReplacingCharactersInRange:NSMakeRange(0,1) withString:@""];
int lastChar = [json length]-1;
json = [json stringByReplacingCharactersInRange:NSMakeRange(lastChar,1) withString:@""];
json = [json stringByReplacingOccurrencesOfString:@"\\" withString:@""];
return  json;

最初にjsonの最初と最後から引用符を削除する場合は、"文字の前にあるすべての\文字を削除します。

これは現在スムーズに機能しているようです。何か間違ったことをしていると思われる場合は、修正してください。

それがいつか誰かを助けることを願っています。

乾杯 、

ジェームズ

于 2012-07-22T00:21:04.273 に答える