NSStringをNSDictionary / JSONに変換する


83

次のデータを次のように保存していNSStringます:

 {
    Key = ID;
    Value =         {
        Content = 268;
        Type = Text;
    };
},
    {
    Key = ContractTemplateId;
    Value =         {
        Content = 65;
        Type = Text;
    };
},

このデータNSDictionaryを、キーと値のペアを含むものに変換したいと思います。

私は、変換するために、最初にしようとしていますNSStringJSONは次のようにオブジェクト:

 NSData *data = [string dataUsingEncoding:NSUTF8StringEncoding];
id json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];

しかし、私が試してみると:

NSString * test = [json objectForKey:@"ID"];
NSLog(@"TEST IS %@", test);

として値を受け取りますNULL

誰かが問題が何であるかを提案できますか?


1
ここで指定されたjson文字列の「ID」は値であり、キーではないことに注意してください。
Sunil Zalavadiya 2013

NSLog(@ "JSON IS%@"、json); ??????
Prasad G

回答:


258

キー値のJSON形式を誤って解釈していると思います。文字列を次のように保存する必要があります

NSString *jsonString = @"{\"ID\":{\"Content\":268,\"type\":\"text\"},\"ContractTemplateID\":{\"Content\":65,\"type\":\"text\"}}";
NSData *data = [jsonString dataUsingEncoding:NSUTF8StringEncoding];
id json = [NSJSONSerialization JSONObjectWithData:data options:0 error:nil];

次のNSLogステートメントを実行すると

NSLog(@"%@",[json objectForKey:@"ID"]);

結果は別のNSDictionaryになります。

{
    Content = 268;
    type = text;
}

これが明確な理解に役立つことを願っています。


1
文字列を再フォーマットするように指示するので、実際には質問に対する答えではありません。場合によっては(たとえば、iOS6形式のIAP領収書)、この形式の文字列が提供されます。
クリスプリンス

1
回答を受け付けた質問に対しても、いつでも自由に回答を投稿できます。ですから、急いで回答のバージョンを投稿し、OPにアプローチして、承認された回答の改訂を検討してください。:)
Janak Nirmal 2014

1
ところでOPはJSONを投稿しましたか?よろしいですか?OPの要件を確認してください。その形式で実現できますか?はいの場合、質問に答えてください。私は賛成票を投じ、新しい報奨金を作成してあなたに授与します。
Janak Nirmal 2014

14

応答から配列を取得すると思うので、配列に応答を割り当てる必要があります。

NSError * err = nil;
NSArray * array = [NSJSONSerialization JSONObjectWithData:[string dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingMutableContainers error:&err];
NSDictionary * dictionary = [array objectAtIndex:0]; 
NSString * test = [dictionary objectForKey:@ "ID"];
NSLog(@ "テストは%@"、test);

6

次のコードを使用します。strはJSON文字列です。

NSError *err = nil;
NSArray *arr = 
 [NSJSONSerialization JSONObjectWithData:[str dataUsingEncoding:NSUTF8StringEncoding] 
                                 options:NSJSONReadingMutableContainers 
                                   error:&err];
// access the dictionaries
NSMutableDictionary *dict = arr[0];
for (NSMutableDictionary *dictionary in arr) {
  // do something using dictionary
}

[arrcount]はゼロを返しています。
GuybrushThreepwood 2013

エラーはエラードメイン= NSCocoaErrorDomainコード= 3840 "操作を完了できませんでした。(Cocoaエラー3840)"(JSONテキストが配列またはオブジェクトで開始されておらず、フラグメントを設定できないようにするオプションがあります。)UserInfo = 0x1f5b3660 {NSDebugDescription = JSONテキストが配列またはオブジェクトで始まっておらず、フラグメントを設定できないようにするオプションがあります。}
GuybrushThreepwood 2013

jsonデータで何かが不正です
Woodstock

2

スウィフト3:

if let jsonString = styleDictionary as? String {
    let objectData = jsonString.data(using: String.Encoding.utf8)
    do {
        let json = try JSONSerialization.jsonObject(with: objectData!, options: JSONSerialization.ReadingOptions.mutableContainers) 
        print(String(describing: json)) 

    } catch {
        // Handle error
        print(error)
    }
}

0

次のコードを使用して、AFHTTPSessionManager失敗ブロックから応答オブジェクトを取得します。次に、ジェネリック型を必要なデータ型に変換できます。

id responseObject = [NSJSONSerialization JSONObjectWithData:(NSData *)error.userInfo[AFNetworkingOperationFailingURLResponseDataErrorKey] options:0 error:nil];
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.