<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
	<channel>
		<title>사랑이 서투른 항숙이</title>
		<link>http://k.zerse.com/</link>
		<description>서투른 인생살이 뜨거운 발자취</description>
		<language>ko</language>
		<pubDate>Tue, 17 Jan 2012 05:25:24 +0900</pubDate>
		<generator>Tistory 1.1 (http://www.tistory.com/)</generator>
		<managingEditor>kzerse</managingEditor>
		<image>
		<title>사랑이 서투른 항숙이</title>
		<url><![CDATA[http://cfile10.uf.tistory.com/image/201532514E24211621FB24]]></url>
		<link>http://k.zerse.com/</link>
		<description>서투른 인생살이 뜨거운 발자취</description>
		</image>
		<item>
			<title>SBJson 사용하기</title>
			<link>http://k.zerse.com/11</link>
			<description>&lt;div&gt;
&lt;span style=&quot;font-size: 8pt; &quot;&gt;&lt;b&gt;이 글은 Xcode 4.0.2 / iOS SDK 4.3.2 환경을 기준으로 작성되었습니다.&lt;/b&gt;&lt;/span&gt;&lt;br /&gt;
&lt;br /&gt;
&amp;nbsp;최근에는 XML의 대안으로 JSON 포멧이 떠오르는 것 같습니다. 간결한 문법에 대체로 XML에 비해 상대적으로 적은 용량으로 표현할 수 있어 스마트폰의 통신 데이터로 손색이 없다고 보여집니다. 아무래도 3G 환경에서는 속도의 측면도 있고 통신비에 대한 부담도 있기 때문에 JSON은 생산성과 효율성을 두루 아우르는 좋은 방향이 되어줄 것입니다.&amp;nbsp;서론이 길었는데, 결국 이 글은 iOS 환경에서 JSON 데이터를 다루는 방법에 대해서 다루겠다고 꺼낸 이야기입니다.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://stig.github.com/json-framework/&quot; target=&quot;_blank&quot; title=&quot;[http://stig.github.com/json-framework/]로 이동합니다.&quot;&gt;&lt;b&gt;SBJson&lt;/b&gt;&lt;/a&gt;은 Mac과 iOS 환경에서 JSON 데이터를 다루는 대표적인 프레임워크 입니다. 정말 핵심을 잘 잡고 심플하게 구현된 프레임워크라 생각됩니다. 사용법도 간단하고 프로젝트에 적용하기도 용이하여 적극 추천하는 바입니다.&lt;br /&gt;
&lt;br /&gt;
&lt;a href=&quot;http://github.com/stig/json-framework/downloads&quot; target=&quot;_blank&quot; title=&quot;[http://github.com/stig/json-framework/downloads]로 이동합니다.&quot;&gt;&lt;b&gt;다운로드페이지&lt;/b&gt;&lt;/a&gt;&lt;br /&gt;
이 글을 작성하는 현재 3.0.1 버전이 공개되어 있습니다.&lt;br /&gt;
&lt;br /&gt;
&lt;meta charset=&quot;utf-8&quot;&gt;다운로드 받은 파일의 압축을 해제하고, 포함된 모든 소스파일을 적용하려는 프로젝트에 다음과 같은 형태로 추가해주면 됩니다.&lt;br /&gt;
&lt;p style=&quot;margin:0&quot;&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile27.uf.tistory.com/original/186330364E2C190D02E4BB&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile27.uf.tistory.com/image/186330364E2C190D02E4BB&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;프로젝트에 SBJson 소스파일 추가.png&quot; height=&quot;609&quot; width=&quot;259&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;br /&gt;
반드시 똑같은 형태여야 하는 것은 아니고, 중요한 것은 Xcode 프로젝트 타겟의 Compile Sources 설정에서 SBJson의 소스파일들도 컴파일하도록 추가되어야 한다는 점입니다.&lt;br /&gt;
&lt;br /&gt;
&lt;p style=&quot;margin:0&quot;&gt;&lt;div class=&quot;imageblock center&quot; style=&quot;text-align: center; clear: both;&quot;&gt;&lt;a href=&quot;http://cfile7.uf.tistory.com/original/173C8A4A4E2C314420F638&quot; rel=&quot;lightbox&quot; target=&quot;_blank&quot;&gt;&lt;img src=&quot;http://cfile7.uf.tistory.com/image/173C8A4A4E2C314420F638&quot; alt=&quot;&quot; filemime=&quot;image/jpeg&quot; filename=&quot;프로젝트 타겟의 빌드 페이즈에서 Compile Sourc.png&quot; height=&quot;381&quot; width=&quot;635&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;/p&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
사용방법은 간단합니다.&lt;br /&gt;
사용할 소스파일의 상단에서 다음과 같이 SBJson.h 파일을 import 해줍니다.&lt;br /&gt;
&lt;pre class=&quot;brush: c&quot;&gt;#import &quot;SBJson.h&quot;
&lt;/pre&gt;
&lt;br /&gt;
그 후, 용도에 따라 SBJsonParser 또는 SBJsonWriter 클래스의 인스턴스를 생성하여 JSON 데이터를 다루면 됩니다.&lt;br /&gt;
&lt;br /&gt;
SBJsonParser 사용 예제&lt;br /&gt;
&lt;pre class=&quot;brush: c&quot;&gt;NSString* jsonString = @&quot;{\&quot;name\&quot;:\&quot;kzerse\&quot;, \&quot;sex\&quot;:\&quot;male\&quot;}&quot;;

SBJsonParser* parser = [ [ SBJsonParser alloc ] init ];

NSMutableDictionary* person = [ parser objectWithString: jsonString ];
[ person retain ];

[ parser release ];

NSLog( @&quot;이름: %@&quot;, [ person valueForKey: @&quot;name&quot; ] );
NSLog( @&quot;성별: %@&quot;, [ person valueForKey: @&quot;sex&quot; ] );
&lt;/pre&gt;
&lt;br /&gt;
SBJsonParser의 objectWithString: 메소드의 반환값은 JSON 데이터에 따라 NSMutableDictionary 또는 NSMutableArray 객체가 됩니다. SBJsonParser의 데이터 변환 규칙은 다음과 같습니다.&lt;br /&gt;
&lt;ul style=&quot;list-style-type: square; &quot;&gt;
&lt;li&gt;null &amp;gt; NSNull&lt;/li&gt;
&lt;li&gt;string &amp;gt; NSString&lt;/li&gt;
&lt;li&gt;array &amp;gt; NSMutableArray&lt;/li&gt;
&lt;li&gt;object &amp;gt; NSMutableDictionary&lt;/li&gt;
&lt;li&gt;true &amp;gt; [ NSNumber numberWithBool: YES ]&lt;/li&gt;
&lt;li&gt;false &amp;gt; [ NSNumber numberWithBool: NO ]&lt;/li&gt;
&lt;li&gt;integer up to 19 digits &amp;gt; [ NSNumber numberWithLongLong: integer ]&lt;/li&gt;
&lt;li&gt;all other numbers &amp;gt; NSDecimalNumber&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
SBJsonWriter 사용 예제
&lt;pre class=&quot;brush: c&quot;&gt;NSMutableDictionary* anAnimal = [ [ NSMutableDictionary alloc ] init ];
[ anAnimal setValue: @&quot;사자&quot; forKey: @&quot;name&quot; ];
[ anAnimal setValue: @&quot;고양이과&quot; forKey: @&quot;family&quot; ];

SBJsonWriter* writer = [ [ SBJsonWriter alloc ] init ];
[ writer setHumanReadable: YES ];

NSString* jsonString = [ writer stringWithObject: anAnimal ];

[ writer release ];
[ anAnimal release ];

NSLog( @&quot;%@&quot;, jsonString );
&lt;/pre&gt;
&lt;br /&gt;
SBJsonWriter의 stringWithObject: 메소드를 사용할 때, 전달하는 인자는 NSDictionary 또는 NSArray 값이며 데이터 변환 규칙은 다음과 같습니다.&lt;br /&gt;
&lt;ul style=&quot;list-style-type: square; &quot;&gt;
&lt;li&gt;NSNull &amp;gt; null&lt;/li&gt;
&lt;li&gt;NSString &amp;gt; string&lt;/li&gt;
&lt;li&gt;NSArray &amp;gt; array&lt;/li&gt;
&lt;li&gt;NSDictionary &amp;gt; object&lt;/li&gt;
&lt;li&gt;[ NSNumber numberWithBool: YES ] &amp;gt; true&lt;/li&gt;
&lt;li&gt;[ NSNumber numberWithBool: NO ] &amp;gt; false&lt;/li&gt;
&lt;li&gt;NSNumber &amp;gt; number&lt;/li&gt;
&lt;/ul&gt;
&lt;br /&gt;
SBJson을 사용할 때 주의할 점은, JSON 포멧을 엄격하게 준수해야 한다는 점입니다. 흔히 실수할 수 있는 것은 많은 브라우저에서 다음과 같은 JSON 데이터는 유효하게 동작합니다만, 올바른 문법은 키 값도 문자열 리터럴로 표현해야 한다는 점입니다.&lt;br /&gt;
&lt;pre class=&quot;brush: js&quot;&gt;{ name: &quot;kzerse&quot;, sex: &quot;male&quot; }; // 대체로 브라우저들이 정상적으로 해석해줍니다.
{ &quot;name&quot;: &quot;kzerse&quot;, &quot;sex&quot;: &quot;male&quot; }; // 올바른 표기법은 이와 같습니다.
&lt;/pre&gt;
&lt;br /&gt;
이 글의 목적은 SBJson을 간단하게 접해보는 데 있습니다. SBJson의 상세한 내용은 &lt;a href=&quot;http://stig.github.com/json-framework/api/3.0/&quot; target=&quot;_blank&quot; title=&quot;[http://stig.github.com/json-framework/api/3.0/]로 이동합니다.&quot;&gt;&lt;b&gt;SBJson Documentation&lt;/b&gt;&lt;/a&gt; 페이지를 참고하시기 바랍니다.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
유익한 내용을 담아본다고 블로그를 재개장했는데, 온갖 사념만 늘어놓고 있는 것 같아서 맘먹고 하나 작성해보았습니다. 이런 글은 항상 위키로 적어왔기 때문에, 시행착오도 좀 있었고 글도 별로 매끄럽게 적지 못한 것 같습니다. 대체로 이런 글의 방향은 주로 이와 같이 간단한 예제와 함께 소개하는 형태로 빠르게 간략화된 정보를 전달하는 데 두고자 합니다. 혹시나 이 누추한 곳에 들려주신 여러분의 달기도 쓰기도 한 여러 의견들을 감사히 듣도록 하겠습니다.&lt;br /&gt;
&amp;nbsp;&lt;/div&gt;
&lt;meta charset=&quot;utf-8&quot;&gt;

&lt;script type=&quot;text/javascript&quot;&gt;SyntaxHighlighter.all();&lt;/script&gt;
&lt;div class=&quot;entry-ccl&quot; style=&quot;clear: both; text-align: right; margin-bottom: 10px&quot;&gt;
	&lt;img id=&quot;ccl-icon-11-0&quot; class=&quot;entry-ccl-by&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black01.png&quot; alt=&quot;저작자 표시&quot;/&gt;
	&lt;img id=&quot;ccl-icon-11-1&quot; class=&quot;entry-ccl-nd&quot; src=&quot;http://i1.daumcdn.net/cfs.tistory/v/0/static/admin/editor/ccl_black03.png&quot; alt=&quot;변경 금지&quot;/&gt;
	&lt;!--
	&lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
		&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nd/2.0/kr/&quot; /&gt;
		&lt;/Work&gt;
		&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nd/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
		&lt;/License&gt;
	&lt;/rdf:RDF&gt;
	--&gt;
&lt;/div&gt;
&lt;div class=&quot;blogger-news-widget&quot; style=&quot;width: 100%; text-align: center&quot;&gt;
		  					&lt;embed src=&quot;http://api.v.daum.net/static/recombox1.swf&quot; quality=&quot;high&quot; flashvars=&quot;nid=18909224&quot; allowscriptaccess=&quot;always&quot; allowfullscreen=&quot;false&quot; bgcolor=&quot;#ffffff&quot; width=&quot;400&quot; height=&quot;80&quot; type=&quot;application/x-shockwave-flash&quot; wmode=&quot;transparent&quot;&gt;&lt;/embed&gt;
						&lt;/div&gt;&lt;fieldset style=&quot;margin:20px 0px 20px 0px;padding:5px;&quot;&gt;&lt;legend&gt;&lt;span&gt;&lt;strong&gt;크리에이티브 커먼즈 라이선스&lt;/strong&gt;&lt;/span&gt;&lt;/legend&gt;&lt;!--Creative Commons License--&gt;&lt;div style=&quot;float: left; width: 88px; margin-top: 3px;&quot;&gt;&lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; target=&quot;_blank&quot;&gt;&lt;img alt=&quot;Creative Commons License&quot; style=&quot;border-width: 0&quot; src=&quot;http://i.creativecommons.org/l/by-nc-sa/2.0/kr/88x31.png&quot;/&gt;&lt;/a&gt;&lt;/div&gt;&lt;div style=&quot;margin-left: 92px; margin-top: 3px; text-align: justify;&quot;&gt;이 저작물은 &lt;a rel=&quot;license&quot; href=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; target=&quot;_blank&quot;&gt;크리에이티브 커먼즈 코리아 저작자표시-비영리-동일조건변경허락 2.0 대한민국 라이선스&lt;/a&gt;에 따라 이용하실 수 있습니다.
			&lt;!-- Creative Commons License--&gt;
			&lt;!-- &lt;rdf:RDF xmlns=&quot;http://web.resource.org/cc/&quot; xmlns:dc=&quot;http://purl.org/dc/elements/1.1/&quot; xmlns:rdf=&quot;http://www.w3.org/1999/02/22-rdf-syntax-ns#&quot;&gt;
			&lt;Work rdf:about=&quot;&quot;&gt;
			&lt;license rdf:resource=&quot;http://creativecommons.org/licenses/by-nc-sa/2.0/kr/&quot; /&gt;
			&lt;/Work&gt;
			&lt;License rdf:about=&quot;http://creativecommons.org/licenses/by-nc-sa/&quot;&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Reproduction&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/Distribution&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Notice&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/Attribution&quot;/&gt;
			&lt;permits rdf:resource=&quot;http://web.resource.org/cc/DerivativeWorks&quot;/&gt;
			&lt;requires rdf:resource=&quot;http://web.resource.org/cc/ShareAlike&quot;/&gt;&lt;prohibits rdf:resource=&quot;http://web.resource.org/cc/CommercialUse&quot;/&gt;&lt;/License&gt;&lt;/rdf:RDF&gt; --&gt;&lt;/div&gt;&lt;/fieldset&gt;</description>
			<category>iOS</category>
			<category>ios</category>
			<category>iPhone</category>
			<category>JSON</category>
			<category>SBJson</category>
			<category>아이폰</category>
			<category>아이폰앱</category>
			<author>kzerse</author>
			<guid>http://k.zerse.com/11</guid>
			<comments>http://k.zerse.com/11#entry11comment</comments>
			<pubDate>Sun, 24 Jul 2011 22:14:24 +0900</pubDate>
		</item>
	</channel>
</rss>

