【问题标题】:PHP parsing a line from within a Json API pagePHP 从 Json API 页面中解析一行
【发布时间】:2013-05-27 15:44:58
【问题描述】:

我正在尝试将此脚本从查找一组变量(例如(playtime_forever))转换为查找另一个变量(例如(backpack_value))

if (!empty($data->response->games)) {
  foreach ($data->response->games as $game) {   
    if ($game->appid == $game_id) { 
      $playtime = $game->playtime_forever;
      if (($playtime < 5940) && ($playtime > 1)) {
        $fh = fopen("final.".$timestamp.".txt", 'a') or die("Can't open file");
...

它最初解析的页面是这样的 http://pastebin.com/rnnCsijd

但现在将是这个。从这里拉 http://backpack.tf/api/IGetUsers/v2/?&steamids=76561197992146126&format=json%27;

{
    "response": {
        "success": 1,
        "current_time": 1369669066,
        "players": {
            "0": {
                "steamid": "76561197992146126",
                "success": 1,
                "backpack_value": 36412.71,
                "backpack_update": 1369630863,
                "name": ":HIT: Bobo the Monkey Boy",
                "notifications": 0
            }
        }
    }
}

一个小改动,但我无法让脚本做我想做的事。如果您能解释如何进行此操作及其背后的步骤,那就太好了。我已经尝试了一段时间,但我无法完成脚本

【问题讨论】:

  • 这两个 JSON 文件完全不同。新 JSON 没有旧 JSON 中的任何密钥。您甚至试图从新的 JSON 中检索哪些数据以及以何种方式?
  • 上面的完整代码在这里。 justpaste.it/2pws。我希望这个新脚本能够解析出“backpack_value”低于一定数量的配置文件。
  • 请相应更新您的问题,使其更加清晰易读。

标签: php json api parsing


【解决方案1】:

要根据您的评论获取配置文件,请使用以下代码:

$profiles = array(); //init array so we can use $profiles[] later
$limitValue = 1000;  //Limit value of backpack_value

foreach($data->response->players as $player) { // Loop thrugh all the players
  if ($player->backpack_value < $limitValue) { // Check the backpack_value
    $profiles[] = $player; // Assign the required players to a new array
  }
}
var_dump($profiles); // Dump the array to browser for debugning

【讨论】:

  • 我实现了它,它没有输出任何东西。有什么建议么? justpaste.it/2pyn(这是 unique.txt 的内容 justpaste.it/2pyo)我要搞砸了,但也许你注意到我错过了什么
  • 我认为您的问题出在if (!empty($data-&gt;backpack_value)){,因为$data-&gt;backpack_value 不存在。你应该试试if (!empty($data)) 或者if ($data-&gt;response-&gt;success))
  • 修复了它,它工作得很好。唯一的问题是我试图找到具有最小值而不是最大值的东西。我试过这个 if (($player->backpack_value backpack_value > 50)) { 但它不起作用,我需要更改更多吗?
  • 你需要像if (($player-&gt;backpack_value &gt; $lowerLimit) &amp;&amp; ($player-&gt;backpack_value &lt; $higherLimit)) {这样的东西
  • 仔细看后,现在所有的脚本都会输出第一个链接,不管结果如何...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-01-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多