解析多个JSON文件并写入文本

时间:2018-04-20 05:12:47

标签: php json

有没有办法优化它以更快地运行?

该脚本根据站点代码读取多个JSON文件,然后只写入我想要的变量。

        <?php
        $wuStations = array(
            'KORHALFW4','KORHALFW3','KORHALFW5','KOROXBOW2','KIDCOUNC2','KIDNEWME2','KIDNEWME4',
          'KIDMIDVA5','KIDCAMBR6','KIDCAMBR4','KORRICHL2','KIDWEISE16','KORONTAR3','KIDWEISE5',
          'KIDPAYET7','KORONTAR6','KORONTAR4','KIDSWEET2','KIDLOWMA5','KIDIDAHO11','KIDLOWMA2',
          'KIDHORSE8','KIDEMMET9','KIDGARDE6','KIDBOISE233','KIDBOISE208','KIDBOISE262',
          'KIDPARMA7','KIDPARMA8','KIDWILDE7','KIDHOMED2','KIDHOMED4','KIDCALDW11','KIDKUNA8',
          'KIDMERID68','KIDBOISE104','KIDBOISE90','KIDBOISE270','KIDBOISE121',
          'KIDBOISE138','KIDBOISE93','KIDBOISE158','KIDBOISE223','KIDBOISE207','KIDBOISE230',
          'KIDBOISE231','KIDBOISE68','KIDSTAR3','KIDSTAR5','KIDEAGLE20','KIDBOISE148',
          'KIDEAGLE20','KIDEAGLE28','KIDMIDDL6','KIDMOUNT9','KIDMERID54','KIDMERID35',
          'KNVJARBI2','KIDOLA2','KIDOLA6','KIDBOISE226','KIDKINGH2','KIDFAIRF4','KIDFAIRF7',
          'KIDWESTM2','KIDGOODI9','KIDGLENN4','KIDGLENN5','KIDBLISS3','KIDBLISS2','KIDHAGER3',
          'KIDBUHL7','KIDBUHL10','KIDFILER7','KIDTWINF306','KIDTWINF293','KIDKIMBE4',
          'KIDALBIO3','KIDMURTA3','KIDOAKLE5','KIDBRUNE3','KIDHAMME3','KIDHAMME2','KIDMURPH4',
          'KIDMELBA2','KIDMELBA3','KOROREGO24','KORCRANE2','KORBURNS11','KORWESTF6','KORBAKER15',
          'KORVALE6','KORNYSSA2','KIDPARMA7','KIDPARMA8','KIDWILDE7','KIDHOMED2','KIDHOMED4',
          'KIDCALDW11','KIDKUNA6','KIDBOISE80','KIDBOISE133','KIDEAGLE20','KIDBOISE148',
          'KIDEAGLE20','KIDEAGLE28','KIDMIDDL6','KIDMOUNT9','KIDMERID54','KIDMERID35',
          'KNVJARBI2','KIDOLA2','KIDOLA6','KORSUMPT2','KORBAKER12','KIDINDIA3','KIDINDIA2',
          'KIDDONNE6','KIDDONNE5','KIDIDAHO30',
            );
        $start = microtime(true);
        foreach ($wuStations as $sta) {
          //JSON
          $wu_url = 'http://api.wunderground.com/api/606f3f6977348613/conditions/lang:EN/q/pws:'.$sta.'.json';
          //READ JSON
          $wu_data = file_get_contents($wu_url);
          $wu = json_decode($wu_data, true);
          $loc = $wu['current_observation']['display_location']['full'];
          $lat = $wu['current_observation']['observation_location']['latitude'];
          $lon = $wu['current_observation']['observation_location']['longitude'];
          $elev = $wu['current_observation']['observation_location']['elevation'];
          $id = $wu['current_observation']['station_id'];
          $ob = $wu['current_observation']['observation_time_rfc822'];
          $tf = $wu['current_observation']['temp_f'];
          $tdf = $wu['current_observation']['dewpoint_f'];
          $wdir = $wu['current_observation']['wind_degrees'];
          $wspd = $wu['current_observation']['wind_mph'];
          $wgst = $wu['current_observation']['wind_gust_mph'];
          $pcp = $wu['current_observation']['precip_1hr_in'];
          echo $id.','.$lat.','.$lon.','.$elev.','.$ob.','.$tf.','.$tdf.','.$wdir.','.$wspd.','.$wgst.','.$pcp;
          echo PHP_EOL;
        }
        $elapsed = microtime(true) - $start;
        echo "Elapsed: $elapsed seconds\r\n";
        ?>

1 个答案:

答案 0 :(得分:0)

我做了一些测试。

两个最长的任务(这里没有意外)是抓取网址解码JSON

为了进一步优化,您可能需要与我们分享一些使用模式。

但简单地说,URL可以同时获取,甚至可以作为其他地方的批处理作业。

对于JSON解码,嗯,这有点棘手。我注意到返回的JSON格式非常好(可视化)。也许不是解码JSON,而是可以跳转到行号并直接读取值(尚未测试时间)。

或者,再次根据使用模式,如果批处理作业可以重新格式化数据并将其存储在某处以便以后检索,则可以节省一些时间。