title: Extract JSON data from file in C++
body: <p>Here there, sorry if this question is not well-suited for this forum. I'm pretty new to programming and thought I'd get a better command of strings and files by creating this little project. What I'm trying to do is extract data from a JSON document. Eventually I'd store the data in an array I suppose and work with it later.</p>
  
  <p>Basically, I'm wondering if there is a better way of going about this. The code seems kind of wordy and definitely not elegant. Again, sorry if this question is not a good one, but I figured there'd be no better way to learn than through a community like this.</p>
  
  <pre><code>#include &lt;iostream&gt;
  #include &lt;fstream&gt;
  #include &lt;cstring&gt;
  #include &lt;string&gt;  //probably including more than necessary
  
  using namespace std; //should be specifying items using scope resolution operator instead
  
  
  int main(int argc, const char * argv[])
  {
  
      ifstream sfile("JSONdatatest.txt");
      string line,temp;
  
  
      while(!sfile.eof()){
  
          getline(sfile, line);
          temp.append(line);  //creates string from file text, use of temp seems extraneous
  
      }
      sfile.close();
  
  
      cout &lt;&lt; "Reading from the file.\n";
      size_t counter=0;
      size_t found=0;
      size_t datasize=0;
  
      while(found!=string::npos &amp;&amp; found&lt;1000*70){ //problem here, program was creating infinite loop
                                                   //initial 'solution' was to constrain found var
                                                   //but fixed with if statement
  
      found = temp.find("name: ",counter);
          if(found!=string::npos){ 
  
      found=found+7; //length of find variable "name: ", puts us to the point where data begins
      size_t ended=temp.find_first_of( "\"", found);
  
      size_t len=ended-found; //length of datum to extract
  
  
      string temp2(temp, found, len); //odd use of a second temp function, 
          cout &lt;&lt; temp2 &lt;&lt; endl;
          counter=ended+1;
          datasize++; //also problem with data size and counter, so many counters, can they 
                      //coordinate to have fewer?
      }
  
      }
  
      cout &lt;&lt; datasize;
  
  
  return 0}
  </code></pre>
  
  <p>Where I indicate an infinite loop is made, I fixed by adding the if statement in the while loop. My guess is because I add 7 to 'found' there is a chance it skips over npos and the loop continues. Adding the if statement fixed it, but made the code look clunky. There has to be a more elegant solution.
  Thanks in advance!</p>