使用 PHP 解析复杂的 JSON

Ume*_*thi 1 php json

我是 PHP 新手,不太清楚如何用 PHP 解析 JSON。这是我从第三方获得的 JSON

{ "data": 
  { "current_condition": 
   [ 
      {"cloudcover": "0", "humidity": "13", "observation_time": "05:47 AM", "precipMM": "0.0", 
      "pressure": "1016", "temp_C": "20", "temp_F": "69", 
      "visibility": "10", "weatherCode": "113",  
      "weatherDesc": [ {"value": "Sunny" } ],  
      "weatherIconUrl": [ {"value": "http:\/\/www.worldweatheronline.com\/images\/wsymbols01_png_64\/wsymbol_0001_sunny.png" } ], 
     " winddir16Point": "SW", "winddirDegree": "218", "windspeedKmph": "12", "windspeedMiles": "7" 
     } 
   ],
   "request": [ 
            {"query": "Lat 32.12 and Lon 76.53", "type": "LatLon" } 
      ],  
   "weather": [ 
          {
            "date": "2012-11-04", "precipMM": "0.0", "tempMaxC": "20", "tempMaxF": "69", "tempMinC": "1", "tempMinF": "34", 
            "weatherCode": "113",  "weatherDesc": [ {"value": "Sunny" } ],  
            "weatherIconUrl": [ {"value": "http:\/\/www.worldweatheronline.com\/images\/wsymbols01_png_64\/wsymbol_0001_sunny.png" } ], 
            "winddir16Point": "SW", "winddirDegree": "218", "winddirection": "SW", "windspeedKmph": "12", "windspeedMiles": "8" 
           }, 
          {
           "date": "2012-11-05", "precipMM": "0.0", "tempMaxC": "20", "tempMaxF": "67", "tempMinC": "4", "tempMinF": "39", 
           "weatherCode": "113", "weatherDesc": [ {"value": "Sunny" } ], 
           "weatherIconUrl": [ {"value": "http:\/\/www.worldweatheronline.com\/images\/wsymbols01_png_64\/wsymbol_0001_sunny.png" } ], 
           "winddir16Point": "SSW", "winddirDegree": "210", "winddirection": "SSW", "windspeedKmph": "12", "windspeedMiles": "7" 
           } 
          ] 
        }
     }
Run Code Online (Sandbox Code Playgroud)

我获取 JSON 数据形式的天气信息,其中包括以下信息

  1. 当前信息
  2. 未来 2 天的天气信息

我不需要所有信息,只想要特定的信息,例如

current_condition
       temp_C
       temp_F
       weatherDesc
Run Code Online (Sandbox Code Playgroud)

我想要从未来 2 天的天气信息中获取一些数据

  1. 日期
  2. 最大温度
  3. 温度最小值
  4. 天气图标Url
  5. 风速Kmph

我在 PHP 中尝试了这段代码

$jsonIterator = new RecursiveIteratorIterator(
    new RecursiveArrayIterator(json_decode($weather, TRUE)),
    RecursiveIteratorIterator::SELF_FIRST);
Run Code Online (Sandbox Code Playgroud)

这似乎给了我数组格式的 JSON 解码数据,但我对如何从 PHP 数据中获取这些特定值感到困惑。我可以迭代数据

foreach ($jsonIterator as $key => $value) {
    if(is_array($value)) {
        foreach ($value as $key => $value) {
    }

    } else {
       // echo "$key\n";
    }
Run Code Online (Sandbox Code Playgroud)

但不确定如何如上所述获取值。任何资源的帮助或指针都会非常有帮助

Alv*_*ong 5

为什么不直接使用json_decode然后处理生成的对象呢?

示例: http: //codepad.org/ciw3ogAu

我使用它是ob_get_content()因为我不想弄乱转义序列,但重点是这一行:

$result = json_decode($my_json_string);
Run Code Online (Sandbox Code Playgroud)

获取信息并不困难。例如,如果您想要当前温度(以摄氏度为单位):

echo $result->data->current_condition[0]->temp_C;
Run Code Online (Sandbox Code Playgroud)

您可以获得未来两天的数组(http://codepad.org/bhOcd3eT):

$weatherarray = $result->data->weather; // An array with two elements
Run Code Online (Sandbox Code Playgroud)

您使用$result->xxx而不是$result["xxx"]因为json_decode将为对象创建对象。您可以通过调用将其更改为数组json_decode($my_json_string, true),然后使用以下方式访问成员:

echo $result["data"]["current_condition"][0]["temp_C"];
Run Code Online (Sandbox Code Playgroud)

  • 示例链接为 404 (2认同)