title: Parsing Search Result with MGTwitterEngine in Objective C
body: <p>I'm using Matt Gemmell's amazing MGTwitterEngine for an iPhone project, and my lack of familiarity with Obj-C and JSON parsing is making a simple job seem rather daunting.</p>
  
  <p>I've read <a href="https://stackoverflow.com/questions/1197996/mgtwitterengine-and-iphone">this link</a>, and while it helps me understand how the data is structured, I still can't seem to be able to parse it.</p>
  
  <p>If I do an NSLog of the output of getSearchResultsForQuery like so:</p>
  
  <pre><code>NSLog(@"getSearchResultsForQuery: connectionIdentifier = %@", [myTwitterEngine getSearchResultsForQuery:@"#joke" sinceID:0 startingAtPage:1 count:5]);
  </code></pre>
  
  <p>I get this in the console:</p>
  
  <pre><code>2009-12-05 00:14:46.518 Entendu[90565:207] getSearchResultsForQuery: connectionIdentifier = DED541CB-A3DA-4C04-8B23-ED20D13B147E
  2009-12-05 00:14:46.843 Entendu[90565:207] Request succeeded for connectionIdentifier = DED541CB-A3DA-4C04-8B23-ED20D13B147E
  2009-12-05 00:14:46.884 Entendu[90565:207] Got search results for DED541CB-A3DA-4C04-8B23-ED20D13B147E:
  (
          {
          "created_at" = 1259989857;
          "from_user" = royanramadhan;
          "from_user_id" = 64716299;
          geo = &lt;null&gt;;
          id = 6361369664;
          "iso_language_code" = sv;
          "profile_image_url" = "http://a3.twimg.com/profile_images/455943541/Dup_01_Foto006_normal.jpg";
          source = "&lt;a href=\"http://m.twitter.com/\" rel=\"nofollow\"&gt;mobile web&lt;/a&gt;";
          "source_api_request_type" = 37;
          text = "kenapa di keybord komputer tulisnya \"ENTER\" ? #joke";
          "to_user_id" = &lt;null&gt;;
      },
          {
          "created_at" = 1259988269;
          "from_user" = alivenkickin;
          "from_user_id" = 2547330;
          geo = &lt;null&gt;;
          id = 6360783744;
          "iso_language_code" = en;
          "profile_image_url" = "http://a3.twimg.com/profile_images/65068323/calvin_normal.jpg";
          source = "&lt;a href=\"http://www.tweetdeck.com/\" rel=\"nofollow\"&gt;TweetDeck&lt;/a&gt;";
          "source_api_request_type" = 37;
          text = "RT @andycrash: A nice, calm and respectable lady went into the pharmacy...#joke http://bit.ly/BGDfJ";
          "to_user_id" = &lt;null&gt;;
      },
          {
          "created_at" = 1259988217;
          "from_user" = lilbytes;
          "from_user_id" = 18943691;
          geo = &lt;null&gt;;
          id = 6360764474;
          "iso_language_code" = en;
          "profile_image_url" = "http://a3.twimg.com/profile_images/477338701/twitterProfilePhoto_normal.jpg";
          source = "&lt;a href=\"http://twitter.com/\"&gt;web&lt;/a&gt;";
          "source_api_request_type" = 37;
          text = "RT @Pyeman: LOL - Great post RT @cahlan: RT @jac_: Christmas light fun: http://bit.ly/828q7K #lol #funny #joke #christmas";
          "to_user_id" = &lt;null&gt;;
      },
          {
          "created_at" = 1259987890;
          "from_user" = jscognam;
          "from_user_id" = 41472147;
          geo = &lt;null&gt;;
          id = 6360648482;
          "iso_language_code" = en;
          "profile_image_url" = "http://a3.twimg.com/profile_images/432856397/AJ_normal.png";
          source = "&lt;a href=\"http://www.tweetdeck.com/\" rel=\"nofollow\"&gt;TweetDeck&lt;/a&gt;";
          "source_api_request_type" = 37;
          text = "RT @jokestweet: Give me ambiguity or give me something else. #joke";
          "to_user_id" = &lt;null&gt;;
      },
          {
          "created_at" = 1259987587;
          "from_user" = jokestweet;
          "from_user_id" = 54008906;
          geo = &lt;null&gt;;
          id = 6360534281;
          "iso_language_code" = en;
          "profile_image_url" = "http://a1.twimg.com/profile_images/403925746/jokes_twitter_normal.jpg";
          source = "&lt;a href=\"http://twitter.com/\"&gt;web&lt;/a&gt;";
          "source_api_request_type" = 37;
          text = "Give me ambiguity or give me something else. #joke";
          "to_user_id" = &lt;null&gt;;
      },
          {
          "created_at" = 1259987426;
          "from_user" = RickyRicardoABN;
          "from_user_id" = 79758746;
          geo = &lt;null&gt;;
          id = 6360472740;
          "iso_language_code" = en;
          "profile_image_url" = "http://a3.twimg.com/profile_images/554599647/l_92120d47e5744fee9da32c4ac71b9eee_normal.jpg";
          source = "&lt;a href=\"http://twitter.com/\"&gt;web&lt;/a&gt;";
          "source_api_request_type" = 37;
          text = "#Why do people tell you when they are speechless? #joke";
          "to_user_id" = &lt;null&gt;;
      },
          {
          "created_at" = 1259984750;
          "from_user" = socialEspeaking;
          "from_user_id" = 80950838;
          geo = &lt;null&gt;;
          id = 6359413973;
          "iso_language_code" = en;
          "profile_image_url" = "http://a1.twimg.com/profile_images/542502866/jack_sm_normal.jpg";
          source = "&lt;a href=\"http://apiwiki.twitter.com/\" rel=\"nofollow\"&gt;API&lt;/a&gt;";
          "source_api_request_type" = 37;
          text = "RT @andycrash A nice, calm and respectable lady went into the pharmacy...#joke http://x4.lol.0sp.in o_O";
          "to_user_id" = &lt;null&gt;;
      },
          {
          "created_at" = 1259984140;
          "from_user" = oceanbutterfly7;
          "from_user_id" = 70740820;
          geo = &lt;null&gt;;
          id = 6359164521;
          "iso_language_code" = en;
          "profile_image_url" = "http://a1.twimg.com/profile_images/558958306/Tiger-puppy_love_normal.jpg";
          source = "&lt;a href=\"/devices\" rel=\"nofollow\"&gt;txt&lt;/a&gt;";
          "source_api_request_type" = 37;
          text = "@jokestweet: \" Hire a teenage while they still know everything,\" #joke";
          "to_user" = jokestweet;
          "to_user_id" = 54008906;
      },
          {
          "created_at" = 1259983842;
          "from_user" = "Fab_DTY";
          "from_user_id" = 51115644;
          geo = &lt;null&gt;;
          id = 6359037805;
          "iso_language_code" = en;
          "profile_image_url" = "http://a3.twimg.com/profile_images/515204077/moto_0326_normal.jpeg";
          source = "&lt;a href=\"http://ubertwitter.com\" rel=\"nofollow\"&gt;UberTwitter&lt;/a&gt;";
          "source_api_request_type" = 37;
          text = "RT @nutshellcards: Energizer Bunny arrested, charged with battery. lmao #Joke";
          "to_user_id" = &lt;null&gt;;
      },
          {
          "created_at" = 1259983640;
          "from_user" = chunyip;
          "from_user_id" = 1221169;
          geo = &lt;null&gt;;
          id = 6358953626;
          "iso_language_code" = en;
          "profile_image_url" = "http://s.twimg.com/a/1259808911/images/default_profile_6_normal.png";
          source = "&lt;a href=\"http://mobileways.de/gravity\" rel=\"nofollow\"&gt;Gravity&lt;/a&gt;";
          "source_api_request_type" = 37;
          text = "RT @jokestweet: If electricity comes from electrons, does that mean that morality comes from morons? #joke";
          "to_user_id" = &lt;null&gt;;
      },
          {
          "created_at" = 1259983356;
          "from_user" = nutshellcards;
          "from_user_id" = 54486591;
          geo = &lt;null&gt;;
          id = 6358837191;
          "iso_language_code" = en;
          "profile_image_url" = "http://a3.twimg.com/profile_images/515618469/blue_normal.png";
          source = "&lt;a href=\"http://twitter.com/\"&gt;web&lt;/a&gt;";
          "source_api_request_type" = 37;
          text = "Energizer Bunny arrested, charged with battery. lmao\n#Joke";
          "to_user_id" = &lt;null&gt;;
      },
          {
          "created_at" = 1259983222;
          "from_user" = sagewhistler;
          "from_user_id" = 3737203;
          geo = &lt;null&gt;;
          id = 6358780332;
          "iso_language_code" = en;
          "profile_image_url" = "http://a1.twimg.com/profile_images/552759084/cowboycig_normal.GIF";
          source = "&lt;a href=\"http://twitter.com/\"&gt;web&lt;/a&gt;";
          "source_api_request_type" = 37;
          text = "#Joke \"What's the shotgun for?\" asks the homeowner. The bear remover replies, \"If the bear knocks me off the roof, shoot the dog.\" [end]";
          "to_user_id" = &lt;null&gt;;
      },
          {
          "created_at" = 1259983181;
          "from_user" = sagewhistler;
          "from_user_id" = 3737203;
          geo = &lt;null&gt;;
          id = 6358763080;
          "iso_language_code" = en;
          "profile_image_url" = "http://a1.twimg.com/profile_images/552759084/cowboycig_normal.GIF";
          source = "&lt;a href=\"http://twitter.com/\"&gt;web&lt;/a&gt;";
          "source_api_request_type" = 37;
          text = "#Joke The bear will then be subdued enough for me to put him in the cage in the back of the van.\"He hands the shotgun to the homeowner...";
          "to_user_id" = &lt;null&gt;;
      },
          {
          "created_at" = 1259983144;
          "from_user" = sagewhistler;
          "from_user_id" = 3737203;
          geo = &lt;null&gt;;
          id = 6358748440;
          "iso_language_code" = en;
          "profile_image_url" = "http://a1.twimg.com/profile_images/552759084/cowboycig_normal.GIF";
          source = "&lt;a href=\"http://twitter.com/\"&gt;web&lt;/a&gt;";
          "source_api_request_type" = 37;
          text = "#Joke When the bear falls off, the pit bull is trained to grab his testicles and not let go...";
          "to_user_id" = &lt;null&gt;;
      },
          {
          "created_at" = 1259983112;
          "from_user" = sagewhistler;
          "from_user_id" = 3737203;
          geo = &lt;null&gt;;
          id = 6358736099;
          "iso_language_code" = en;
          "profile_image_url" = "http://a1.twimg.com/profile_images/552759084/cowboycig_normal.GIF";
          source = "&lt;a href=\"http://twitter.com/\"&gt;web&lt;/a&gt;";
          "source_api_request_type" = 37;
          text = "#Joke \"I'm going to put this ladder up against the roof, then I'm going to go up there &amp; knock the bear off the roof with this baseball bat";
          "to_user_id" = &lt;null&gt;;
      },
          {
          "completed_in" = 0;
          "max_id" = 6361369664;
          "next_page" = "?page=2&amp;max_id=6361369664&amp;q=%23joke";
          page = 1;
          query = "%23joke";
          "refresh_url" = "?since_id=6361369664&amp;q=%23joke";
          "results_per_page" = 15;
          "since_id" = 0;
          "source_api_request_type" = 37;
      }
  )
  </code></pre>
  
  <p>The strange thing is I have count:5, yet I'm getting many more results. </p>
  
  <p>For the actual parsing, would I save the output to an NSArray, and then an NSDictionary, which I can query with valueForKey:@"text" for example?</p>
  
  <p>I know two delegate methods are being called too (requestSucceeded: and searchResultsReceived:forRequest: ) but I'm not sure how this affects parsing. </p>
  
  <p>The actual delegate method for searchResultsReceived:forRequest: is:</p>
  
  <pre><code>- (void)searchResultsReceived:(NSArray *)searchResults forRequest:(NSString *)connectionIdentifier
  {
   NSLog(@"Got search results for %@:\r%@", connectionIdentifier, searchResults);
  }
  </code></pre>
  
  <p>This suggests that the results are actually stored by variable searchResults. </p>
  
  <p>Still, how do I get the individual strings?</p>
  
  <p>Thanks for the help!</p>