web-dev-qa-db-ja.com

NSStringからNSDictionary / JSONへの変換

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として値を受け取ります。

誰でも問題を提案できますか?

77

キー値の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;
}

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

245
Janak Nirmal

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

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 is%@"、test);
14
MobileDev

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
}
6
Woodstock

スウィフト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)
    }
}
1
Josh O'Connor

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

id responseObject = [NSJSONSerialization JSONObjectWithData:(NSData *)error.userInfo[AFNetworkingOperationFailingURLResponseDataErrorKey] options:0 error:nil];
0
krish2me