iOS 개발 JSON 형식 데이터 생 성 및 분석
1. JSON 은 무엇 입 니까?
2. 우 리 는 왜 JSON 형식의 데 이 터 를 사용 해 야 합 니까?
3. JSON 형식의 데 이 터 를 어떻게 생 성 합 니까?
4. JSON 형식의 데 이 터 를 어떻게 해석 합 니까?
JSON 형식 이 xml 를 대체 하여 네트워크 전송 에 큰 편 의 를 가 져 왔 지만 xml 의 일목요연 함 이 없 었 다. 특히 json 데이터 가 길 때 우 리 는 번 거 롭 고 복잡 한 데이터 노드 검색 에 빠 질 것 이다.이때 우 리 는 온라인 검사 도구 인 BeJSon 이 필요 하 다.
1. JSON 은 무엇 입 니까?
JSON (JavaScript Object Notation) 은 경량급 데이터 교환 형식 이다.그것 은 ECMAScript 의 하위 집합 을 기반 으로 합 니 다.JSON 은 언어 에 완전히 독립 된 텍스트 형식 을 사용 하지만 C 언어 가족 과 유사 한 습관 (C, C + +, C \ #, Java, JavaScript, Perl, Python 등 포함) 도 사용 했다.이러한 특성 들 은 JSON 을 이상 적 인 데이터 교환 언어 로 만 들 었 다.사람 이 읽 고 쓰기 쉬 우 며 기계 적 으로 해석 하고 생 성 하기 도 쉽다 (일반적으로 네트워크 전송 속 도 를 높이 는 데 쓰 인 다).
JSON 데 이 터 는 주로 두 가지 데이터 구조 가 있 는데 하 나 는 키 / 값 이 고 다른 하 나 는 배열 의 형식 으로 표시 된다.
1. JSON 데이터 의 쓰기 형식 은 이름 / 값 이 맞습니다.예:
{"firstName":"Brett","lastName":"McLaughlin","email":"aaaa"}
2. JSON 데이터 의 쓰기 형식 은 배열 형식 으로 한 조 의 값 을 표시 해 야 할 때 JSON 은 가 독성 을 높 일 뿐만 아니 라 복잡성 도 줄 일 수 있다.예:
{
"programmers": [{
"firstName": "Brett",
"lastName": "McLaughlin",
"email": "aaaa"
}, {
"firstName": "Elliotte",
"lastName": "Harold",
"email": "cccc"
}],
"authors": [{
"firstName": "Isaac",
"lastName": "Asimov",
"genre": "sciencefiction"
}, {
"firstName": "Frank",
"lastName": "Peretti",
"genre": "christianfiction"
}],
"musicians": [{
"firstName": "Eric",
"lastName": "Clapton",
"instrument": "guitar"
}, {
"firstName": "Sergei",
"lastName": "Rachmaninoff",
"instrument": "piano"
}]
}
2. 우 리 는 왜 JSON 형식의 데 이 터 를 사용 해 야 합 니까?
JSON 은 JavaScript 대상 에 표 시 된 데 이 터 를 문자열 로 변환 한 다음 함수 간 에 이 문자열 을 쉽게 전달 하거나 비동기 응용 프로그램 에서 웹 클 라 이언 트 에서 서버 엔 드 프로그램 에 문자열 을 전달 할 수 있 습 니 다.이 문자열 은 좀 이상해 보이 지만 자 바스 크 립 트 는 쉽게 설명 할 수 있 으 며 JSON 은 '이름 / 값 쌍' 보다 더 복잡 한 구 조 를 나 타 낼 수 있다.예 를 들 어 키 와 값 의 간단 한 목록 뿐만 아니 라 배열 과 복잡 한 대상 을 나 타 낼 수 있다.
JSON 은 패 킷 형식 으로 전송 할 때 더욱 효율 적 입 니 다. 이것 은 JSON 이 XML 처럼 엄격 한 닫 힌 태그 가 필요 하지 않 기 때문에 효과 적 인 데 이 터 량 이 전체 패 킷 보다 크게 향상 되 고 똑 같은 데이터 트 래 픽 을 줄 이 는 상황 에서 네트워크 의 전송 압력 을 줄 일 수 있 습 니 다.
3. JSON 형식의 데 이 터 를 어떻게 생 성 합 니까?
1. 사전 NSDictionary 를 이용 하여 키 / 값 형식의 데이터 로 변환 합 니 다.
// NSString, NSNumber, NSArray, NSDictionary, or NSNull , . JSON .
NSDictionary *dict = @{@"name" : @"me", @"do" : @"something", @"with" : @"her", @"address" : @"home"};
// 1. JSON .
// YES if obj can be converted to JSON data, otherwise NO
BOOL isYes = [NSJSONSerialization isValidJSONObject:dict];
if (isYes) {
NSLog(@" ");
/* JSON data for obj, or nil if an internal error occurs. The resulting data is a encoded in UTF-8.
*/
NSData *jsonData = [NSJSONSerialization dataWithJSONObject:dict options:0 error:NULL];
/*
Writes the bytes in the receiver to the file specified by a given path.
YES if the operation succeeds, otherwise NO
*/
// JSON
// : .
// : AFN ! , ! .
[jsonData writeToFile:@"/Users/SunnyBoy/Sites/JSON_XML/dict.json" atomically:YES];
NSLog(@"%@", [[NSString alloc] initWithData:jsonData encoding:NSUTF8StringEncoding]);
} else {
NSLog(@"JSON , ");
}
2. JSON 직렬 화 를 통 해 배열 을 변환 할 수 있 지만 변환 결 과 는 표준 화 된 JSON 형식 이 아 닙 니 다.
NSArray *array = @[@"qn", @18, @"ya", @"wj"];
BOOL isYes = [NSJSONSerialization isValidJSONObject:array];
if (isYes) {
NSLog(@" ");
NSData *data = [NSJSONSerialization dataWithJSONObject:array options:0 error:NULL];
[data writeToFile:@"/Users/SunnyBoy/Sites/JSON_XML/base" atomically:YES];
} else {
NSLog(@"JSON , ");
}
4. JSON 형식의 데 이 터 를 어떻게 해석 합 니까?
1. TouchJSon 해석 방법 사용: (가방 가 져 오기: \ # import "TouchJSon / JSON / CJSONdeserializer. h")
// TouchJson
// API
NSURL *url = [NSURL URLWithString:@"http://m.weather.com.cn/data/101010100.html"];
// NSError ,
NSError *error;
NSString *jsonString = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error];
NSLog(@"jsonString--->%@",jsonString);
// , UTF8,
NSDictionary *rootDic = [[CJSONDeserializer deserializer] deserialize:[jsonString dataUsingEncoding:NSUTF8StringEncoding] error:&error];
// Json ,
NSDictionary *weatherInfo = [rootDic objectForKey:@"weatherinfo"];
NSLog(@"weatherInfo--->%@",weatherInfo);
//
NSLog(@"%@",[NSString stringWithFormat:@" %@ %@ %@ :%@ %@ ",[weatherInfo objectForKey:@"date_y"],[weatherInfo objectForKey:@"week"],[weatherInfo objectForKey:@"city"], [weatherInfo objectForKey:@"weather1"], [weatherInfo objectForKey:@"temp1"]]);
2. SBJSon 해석 방법 사용: (가방 가 져 오기: \ # import "SBJSon / SBJSon. h")
// SBJson
NSURL *url = [NSURL URLWithString:@"http://www.weather.com.cn/adat/sk/101010100.html"];
NSError *error = nil;
NSString *jsonString = [NSString stringWithContentsOfURL:url encoding:NSUTF8StringEncoding error:&error];
SBJsonParser *parser = [[SBJsonParser alloc] init];
NSDictionary *rootDic = [parser objectWithString:jsonString error:&error];
NSDictionary *weatherInfo = [rootDic objectForKey:@"weatherinfo"];
NSLog(@"%@", [NSString stringWithFormat:@" %@ %@ %@ :%@ %@ ",[weatherInfo objectForKey:@"date_y"],[weatherInfo objectForKey:@"week"],[weatherInfo objectForKey:@"city"], [weatherInfo objectForKey:@"weather1"], [weatherInfo objectForKey:@"temp1"]]);
3. IOS 5 자체 분석 클래스 NSJSONserialization 방법 으로 분석: (가방 가 져 올 필요 없 음, IOS 5 지원, 저 버 전 IOS 지원 하지 않 음)
//
NSURL *url = [ NSURL URLWithString:@"http://www.weather.com.cn/adat/sk/101010100.html"];
//
NSURLRequest *request = [NSURLRequest requestWithURL:url];
[[[NSURLSession sharedSession] dataTaskWithRequest:request completionHandler:^(NSData * _Nullable data, NSURLResponse * _Nullable response, NSError * _Nullable error) {
// Block , .
// : !
// :
if (data && !error) {
// JSON ,IOS5 NSJSONSerialization response
id obj = [NSJSONSerialization JSONObjectWithData:data options:0 error:NULL];
NSDictionary *dict = obj[@"weatherinfo"];
NSLog(@"%@---%@", dict, dict[@"city"]);
}
}] resume];
4. JSONkit 해석 방법 사용: (가방 가 져 오기: \ # import "JSONkit / JSONkit. h")
// json “ ” , value 、 , objectFromJSONString
NSString *json1 = @"{\"a\":123, \"b\":\"abc\"}";
NSLog(@"json1:%@",json1);
NSDictionary *data1 = [json1 objectFromJSONString];
NSLog(@"json1.a:%@",[data1 objectForKey:@"a"]);
NSLog(@"json1.b:%@",[data1 objectForKey:@"b"]);
// json , value array、object, objectFromJSONString, ( : php/json_encode json , NSString json , ), objectFromJSONStringWithParseOptions:
NSString *json2 = @"{\"a\":123, \"b\":\"abc\", \"c\":[456, \"hello\"], \"d\":{\"name\":\" \", \"age\":\"32\"}}";
NSLog(@"json2:%@", json2);
NSDictionary *data2 = [json2 objectFromJSONStringWithParseOptions:JKParseOptionLooseUnicode];
NSLog(@"json2.c:%@", [data2 objectForKey:@"c"]);
NSLog(@"json2.d:%@", [data2 objectForKey:@"d"]);
우호 알림:
4 에서 해석 방식 의 비교:
시스템 의 API 해석 속도 가 가장 빠르다.
SBJSON 의 해석 속 도 는 꼴찌 에서 두 번 째 로 떨 어 졌 다.
시스템 API 와 가 까 운 것 은 JSONkit 이다.
향후 개발 과정 에서 JSON 데 이 터 를 분석 하기 위해 시스템 의 API 나 JSONkit 을 사용 하 는 것 을 권장 합 니 다.
만약 본문 에 잘못된 점 이 있다 면 벽돌 을 치 며 지적 하고 당신 과 함께 격려 하 는 것 을 환영 합 니 다. 감사합니다!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.