2016-08-31 2 views
-1

できることはありますかNSLogJSONNSDataの回答はJSON形式ですか?彼らはNSDictionary印刷しているNSData JSONレスポンスをJSON形式でNSLogする方法は?

NSLog(@"JSON NSString: %@" ,jsonData); 

In this post、私はNSDictionaryのに変換することができます。 this(null)を返します。

NSLogはJSON形式でどうすればよいですか?

+0

「jsonData」を正確に変換するコードは何ですか? – Larme

+0

@Lamre jsonDataはNSDataです。私はそれを印刷するコードが必要です。私はそれをNSDictionaryに変換することができますが、codebeautifyで比較することはできません。 –

+0

NSDataがnilでないことを確認していますか? –

答えて

1


jsonDataは(あなたが与えた)JSONを表すhexDataされていません。クイック

(実行可能ではないソリューションを!)ハックあなたのJSONがあなたのサイトにCodeBeautify使用して取得する:

NSDictionary *dictFromData = [NSKeyedUnarchiver unarchiveObjectWithData:jsonData]; 
NSData *realJSONData = [NSJSONSerialization dataWithJSONObject:dictFromData options:0 error:nil]; 
NSString *strFINAL = [[NSString alloc] initWithData:realJSONData encoding:NSUTF8StringEncoding]; 
NSLog(@"StrFINAL: %@", strFINAL); 

注:ええ、私はerrorパラメータをバイパスし、そして我々はいけないし。 0の代わりに NSJSONWritingPrettyPrintedoptions:に設定すると、CodeBeautifyとほぼ同じ結果になります。どのように私はそこに手に入れた

ます:
Firtを、私は/ this answerNSDataのあなたのバンプ列をコピー&ペースト。 そのように、私はjsonDataを手に入れました。 その後、私はそれはあなたの情報を与えられるべきで、単に何を試してみました:

NSDictionary *dict = [NSJSONSerialization JSONObjectWithData:jsonData options:NSJSONReadingAllowFragments error:&errorJSON]; 

エラーを与えて動作しなかった:

Error Domain=NSCocoaErrorDomain Code=3840 "The operation couldn’t be completed. (Cocoa error 3840.)" (Invalid value around character 0.) UserInfo=0x17598540 {NSDebugDescription=Invalid value around character 0.}

しかしNSDictionary *dictWithData = [NSKeyedUnarchiver unarchiveObjectWithData:jsonData];
が、私は本当のNSDictionaryを得ることができました。しかし、NSKeyedArchiver/NSKeyedUnarchiverは、NSJSONSerializationと同等の機能を実行しています。NSObjectNSData(またはその逆)に変換してシリアル化します。しかし、より強力です:NSCodingに準拠しているオブジェクトの種類。ここはもともとJSONのものです(カスタムオブジェクトではなく、NSStringNSNumberNSArrayNSDictionaryオブジェクトなので、これ以上のコードは必要ありません)。 例えば、それをNSUserDefaultsに保存しようとしましたが、それはaではありません。私の試行にもあったのですが、jsonDataをメモリに保存してdictionaryWithContentsOfFile:を使って私には奇妙な答えを与えましたが、重要な点は "$ class" = "{value = 23}" "私にはNSKeyArchiver/NSKeyUnarchiverにつながっています)。私はあなたが正確に何をしたのか分かりません。

•結論:
明らかに、どこかで、ウェブ上に見つかったものが混在しています。あなたはそれを再加工する必要があります。あなたはこのようにすることはできません。他の場所であなたのコードに問題があります。 jsonDataはどこから入手しましたか?あなたはそれで何をしましたか?

+0

私は現在ソースコードを持っていません。私は日曜日にオフィスに戻るときにこれを試すことができます。データは.Netサーバーから送信されます。あなたは教祖です。 –

0

コード:

NSLog("Formatted JSON : %@" ,[[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]); 
0

異なる状況があります。 JSONデータの解析がうまくいけば、結果(辞書または配列)を記録するだけです。 JSONデータの解析に失敗し、JSONデータに問題があると思われる場合は、JSONデータをNSStringに変換してログに記録します。最後に、NSStringへの変換が失敗した場合、またはNSStringを見て何が間違っているのかわからない場合は、NSData自体を記録してバイトを表示できます。これは、誰かがJSONデータに制御文字や他のナンセンスを入れることができたら便利です。

最高の方法は、NSDataを解析して必要な情報を出力するメソッドです(警告!臆病者用ではありません!自分でコードを書く必要があります)。何が悪い•

+0

問題は、著者があまりにも多くのものを混ぜていることです。例えば、 'jsonData'ではJSON(通常は99.9%の場合)を取得することはできませんが、できるだけ' [NSKeyedUnarchiver unarchiveObjectWithData:jsonData] 'で行うことができます。しかし、彼はどこかで 'NSCoding'を使っていました。 – Larme

関連する問題