एनएसएसटीरिंग को NS सहार / JSON में परिवर्तित करना


83

मेरे पास निम्न डेटा के रूप में सहेजा गया है NSString:

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

मैं इस डेटा को एक NSDictionaryमहत्वपूर्ण मान वाले जोड़े में बदलना चाहता हूं ।

मैं NSStringएक JSON ऑब्जेक्ट्स को इस प्रकार परिवर्तित करने के लिए पहले प्रयास कर रहा हूं :

 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 string में "ID" मान है, कुंजी नहीं।
सुनील ज़लावदिया

NSLog (@ "JSON IS% @", json); ??????
प्रसाद जी

जवाबों:


259

मेरा मानना ​​है कि आप प्रमुख मूल्यों के लिए 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"]);

परिणाम एक और NS ढलान होगा।

{
    Content = 268;
    type = text;
}

आशा है कि यह स्पष्ट समझ पाने में मदद करता है।


1
वास्तव में इस सवाल का जवाब नहीं है क्योंकि आप व्यक्ति को अपनी स्ट्रिंग को सुधारने के लिए कहते हैं। कुछ मामलों में (जैसे, iOS6 प्रारूप IAP प्राप्तियां), आपको इस प्रारूप में एक स्ट्रिंग दी जाती है।
क्रिस प्रिंस

1
जिन प्रश्नों के उत्तर स्वीकार किए गए हैं, उनके उत्तर भी आप हमेशा पोस्ट करने के लिए स्वतंत्र हैं। तो कृपया जल्दी करें और उत्तर के अपने संस्करण को पोस्ट करें और संशोधित स्वीकृत उत्तर पर विचार करने के लिए ओपी से संपर्क करें। :)
जनक निर्मल '’

1
BTW ओपी ने JSON पोस्ट किया है? क्या अापको उस बारे में पूर्ण विशवास है? कृपया ओपी की आवश्यकता की जांच करें और क्या उस प्रारूप में इसे प्राप्त करना संभव है? यदि हाँ, तो प्रश्न का उत्तर दूंगा और मैं उत्थान करूंगा और नए इनाम पैदा करूंगा और आपको इसे प्रदान करूंगा।
जनक निर्मल '’

14

मुझे लगता है कि आपको प्रतिक्रिया से सरणी प्राप्त होती है, इसलिए आपको सरणी के लिए प्रतिक्रिया असाइन करनी होगी।

NSError * इरिल = nil;
NSArray * सरणी = [NSJSONSerialization JSONObjectWithData: [string dataUsingEncoding: NSUTF8StringEncoding] विकल्प: NSJSONReadingMutContainers त्रुटि: & इरेट];
NS मंदार * शब्दकोश = [सरणी वस्तुएटंडेक्स: 0]; 
NSString * परीक्षण = [शब्दकोश ऑब्जेक्टफ़ॉरके: @ "आईडी"];
NSLog (@ "टेस्ट% @" है, परीक्षण);

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
}

[arr count] शून्य लौट रहा है।
ग्यूब्रशथ्रीपवुड

त्रुटि त्रुटि डोमेन = NSCocoaErrorDomain कोड = 3840 है "ऑपरेशन पूरा नहीं किया जा सका (कोको त्रुटि 3840।)" (खंडों को सेट करने की अनुमति देने के लिए JSON पाठ सरणी या ऑब्जेक्ट और विकल्प के साथ शुरू नहीं हुआ।) UserInfo = 0x1f5b3660 {NSDebugDescription =। JSON टेक्स्ट ने खंडों को सेट नहीं करने देने के लिए सरणी या ऑब्जेक्ट और विकल्प के साथ शुरू नहीं किया।}
गायब्रश थ्रीपवुड

आपके जोंस डेटा में कुछ विकृत है
वुडस्टॉक

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];
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.