मैं जेएसओएन में अपनी कक्षाओं को क्रमबद्ध करने के लिए NSJSONSerialization डेटा WithJSONObject का उपयोग कर रहा हूं। जब यह एक बूल को क्रमबद्ध करता है, तो यह JSON स्ट्रिंग में मान 1 या 0 देता है। मुझे इसके बजाय सच या गलत होने की आवश्यकता है। क्या यह सामान्य रूप से करना संभव है?मैं बुलियन को सही या गलत के रूप में आउटपुट करने के लिए NSJSONSerialization कैसे प्राप्त करूं?
उत्तर
नहीं, एक बूल के लिए फाउंडेशन ऑब्जेक्ट NSNumber
numberWithBool
है, जो 0 या 1 हो जाता है। हमारे पास Bool
ऑब्जेक्ट नहीं है। JSON
पढ़ने के लिए वही जाओ। सही/गलत एक NSNumber
फिर से बन जाएगा।
आप Bool
कक्षा बना सकते हैं और अपना खुद का पार्सर बना सकते हैं। Arrays Arrays हैं और JSON
ऑब्जेक्ट्स NSDictionary
हैं। आप चाबियाँ पूछ सकते हैं, परीक्षण कर सकते हैं कि कक्षा क्या पीछे है और JSON
इस से स्ट्रिंग बनाएं।
धन्यवाद, मैंने अपना स्वयं का JSONBool क्लास बनाया है और इसे –
@TritonMan दिमाग JSONBool क्लास में कोड के अधिक पोस्टिंग करने में सक्षम था? एक ही चीज़ को पूरा करने की कोशिश कर रहा है। – TahoeWolverine
हां, जिस तरह से NSJSONSerialization वर्षों में बदलता है। कृपया उस तारीख को नोट करें जब इस प्रश्न से पूछा गया था और उत्तर दिया गया था। –
जब मैं [NSNumber numberWithBool:NO]
बनाता हूं, तो NSJSONSerialization JSON स्ट्रिंग में "झूठा" शब्द देता है।
संपादित नए शॉर्टकट के साथ आप भी इन काम लोगों का उपयोग कर सकते हैं:
@(YES)/ @(NO)
@(1) / @(0)
@YES / @NO
@1 / @0
इस तरह आप अपने मूल्यों के माध्यम से पाशन की तरह कुछ बच सकते हैं। मुझे सटीक विपरीत व्यवहार चाहिए लेकिन NSNumber
ऑब्जेक्ट्स हैं। इसलिए मैं पाश करने के लिए है ...
संपादित द्वितीय
mbi टिप्पणी में कहा वहाँ iOS संस्करण के बीच एक अंतर है।
NSDictionary *data = @{
@"a": @(YES),
@"b": @YES,
@"c": @(1),
@"d": @1
};
NSLog(@"%@", [[NSString alloc] initWithData:[NSJSONSerialization dataWithJSONObject:data options:0 error:nil] encoding:NSUTF8StringEncoding]);
2016-07-05 02:23:43.964 Test App[24581:6231996] {"a":true,"b":true,"c":1,"d":1}
यहां आईओएस संस्करणों के बीच एक छोटी सी चेतावनी है! यह कोड '[NSJSONSerialization डेटा WithJSONObject: @ {@" Test1 ": @YES, @" Test2 ": @ (YES), @" Test3 ": @true, @" Test4 ": @ (true)} विकल्प: शून्य त्रुटि: शून्य] ' आईओएस 9 ' {"टेस्ट 4": सत्य, "टेस्ट 3": सत्य, "टेस्ट 2": सत्य, "टेस्ट 2": सत्य, "टेस्ट 1": सत्य} ' पर इस जेसन का उत्पादन करता है लेकिन आईओएस 8 पर इस जेसन का उत्पादन करता है और '{" टेस्ट 4 ": 1," टेस्ट 3 ": 1," टेस्ट 2 ": सत्य," टेस्ट 1 ": सत्य}' – mbi
दिलचस्प ... इस अवलोकन के लिए धन्यवाद! –
नहीं, मैंने इसे नहीं देखा। मैं अपनी टिप्पणी हटा दूंगा। इंगित करने के लिए धन्यवाद! –
बस अपने आप को इस पार भाग गया, यकीन नहीं करता है, तो यह सबसे अच्छा जवाब लेकिन ...
@YES या @NO उपयोग करना सुनिश्चित करें है, तो अपने outputted json: तो यहाँ एक iOS9 परीक्षा है सही/उस में झूठी होगा:
[NSJSONSerialization dataWithJSONObject:@{@"test": @YES} options:0 error: nil];
तो आप अपने अन्य "बूलियन्स"/बूलियन मूल्यों की तरह चालू करना होगा -> @YES/@NO जब dataWithJSONObject के लिए शब्दकोश में डाल।
[NSJSONSerialization dataWithJSONObject:@{@"test": (boolLikeValue ? @YES : @NO)} options:0 error: nil];
कोरडाटा के बूलियन का उपयोग करते समय मैं इसी तरह की समस्या में भाग गया, जिसे एनएसएनंबर के रूप में भी संग्रहीत किया जाता है। मेरे लिए सबसे आसान समाधान @() का उपयोग किया गया था:
[NSJSONSerialization dataWithJSONObject:@{@"bool": @([object.value boolValue])} options:0 error: nil];
मुझे लगता है कि @() बूल मान समझते हैं और numberWithBool साथ NSNumber प्रारंभ करता है: जो JSON
में सही/गलत की ओर जाता हैहाँ, यह,
NSDictionary *dict = [NSDictionary dictionaryWithObjectsAndKeys:kCFBooleanTrue, @"key_1",
kCFBooleanFalse, @"key_2",
nil]
तो
+०१२३५१६४१०६: kCFBooleanTrue और kCFBooleanFalse का उपयोग करके एक बूलियन (सही/गलत) NSJSONSerialization साथ उत्पादन के लिए संभव हैNSError *error = nil;
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict options:kNilOptions error:&error];
मैंने अभी आईओएस 9 पर इस मुद्दे को मारा। मेरा मामला यह है कि मेरे पास CoreData प्रॉपर्टी workout.private
है जो कोरडाटा हैंडलिंग के कारण NSNumber * पर बूल मैप किया गया है।
जब JSON बनाने [NSNumber numberWithBool:workout.private.boolValue]
सेट की उम्मीद सही/JSON में झूठी है, लेकिन "0" सिर्फ workout.private
या @ (workout.private.boolValue) सेट "1" या।
इनमें से कोई वास्तव में वास्तविक उत्तर है: http://stackoverflow.com/a/17234722/105903 या http://stackoverflow.com/a/28450291/105903। मन इसे इस तरह चिह्नित कर रहा है? –
जब तक आप एक timetraveller नहीं हैं यह असली जवाब नहीं है। कृपया उस तारीख को नोट करें जब इस प्रश्न से पूछा गया था और उत्तर दिया गया था। धन्यवाद। –