Advertisement
honey_the_codewitch

pull parsing json

Apr 1st, 2024
567
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.29 KB | None | 0 0
  1. char name[2048];
  2. char overview[8192];
  3. void read_episodes(json_reader_base& reader, Stream& output) {
  4.     int root_array_depth = 0;
  5.     // episodes opens with an array
  6.     if(reader.read() && reader.node_type()==json_node_type::array) {
  7.         root_array_depth = reader.depth();
  8.         while(true) {
  9.             // if we're at the end of the array, break
  10.             if(reader.depth()==root_array_depth &&
  11.                 reader.node_type()==json_node_type::end_array) {
  12.                 break;
  13.             }
  14.             // read each "episode object"
  15.             if(reader.read()&&
  16.                 reader.node_type()==json_node_type::object) {
  17.                
  18.                 int episode_object_depth = reader.depth();
  19.                 int season_number = -1;
  20.                 int episode_number = -1;
  21.                 while(reader.read() &&
  22.                     reader.depth()>=episode_object_depth) {
  23.                     // make sure we don't read any nested objects
  24.                     // under this one
  25.                     if(reader.depth()==episode_object_depth &&
  26.                         reader.node_type()==json_node_type::field) {
  27.                         if(0==strcmp("episode_number",reader.value()) &&
  28.                             reader.read() &&
  29.                             reader.node_type()==json_node_type::value) {
  30.                             episode_number = reader.value_int();
  31.                         }
  32.                         if(0==strcmp("season_number",reader.value()) &&
  33.                             reader.read() &&
  34.                             reader.node_type()==json_node_type::value) {
  35.                             season_number = reader.value_int();
  36.                         }
  37.                         // gather the name
  38.                         if(0==strcmp("name",reader.value())) {
  39.                             name[0]=0;
  40.                             while(reader.read() && reader.is_value()) {
  41.                                 strcat(name,reader.value());
  42.                             }
  43.                         }
  44.                         // gather the overview
  45.                         if(0==strcmp("overview",reader.value())) {
  46.                             overview[0]=0;
  47.                             while(reader.read() && reader.is_value()) {
  48.                                 strcat(overview,reader.value());
  49.                             }
  50.                         }
  51.                     }
  52.                 }
  53.                 if(season_number>-1 && episode_number>-1 && name[0]) {
  54.                     output.printf("S%02dE%02d %s\r\n",
  55.                         season_number,
  56.                         episode_number,
  57.                         name);
  58.                     if(overview[0]) {
  59.                         output.printf("\t%s\r\n",overview);
  60.                     }
  61.                     output.println("");
  62.                 }
  63.             }
  64.         }
  65.     }
  66. }
  67. void read_series(json_reader_base& reader, Stream& output) {
  68.     while(reader.read()) {
  69.         // find "episodes"
  70.         switch(reader.node_type()) {
  71.             case json_node_type::field:
  72.                 if(0==strcmp("episodes",reader.value())) {
  73.                     read_episodes(reader, output);
  74.                 }
  75.                 break;
  76.             default:
  77.                 break;      
  78.         }
  79.     }
  80. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement