Blogger Information
Blog 33
fans 0
comment 0
visits 49958
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
PHP JSON与cURL 函数
Lon
Original
577 people have browsed it

PHP JSON与cURL 函数

一、什么是 JSON ?

  • JSON 指的是 JavaScript 对象表示法(JavaScript Object Notation)
  • JSON 是轻量级的文本数据交换格式
  • JSON 独立于语言:JSON 使用 Javascript语法来描述数据对象,但是 JSON 仍然独立于语言和平台。JSON 解析器和 JSON 库支持许多不同的编程语言。 目前非常多的动态(PHP,JSP,.NET)编程语言都支持JSON。
  • JSON 具有自我描述性,更易理解

二、JSON 函数

函数 描述
json_encode 对变量进行 JSON 编码
json_decode 对 JSON 格式的字符串进行解码,转换为 PHP 变量
json_last_error 返回最后发生的错误

1、json_encode

PHP json_encode() 用于对变量进行 JSON 编码,该函数如果执行成功返回 JSON 数据,否则返回 FALSE 。

实例

  1. <?php
  2. $arr = ['a' => 1, 'b' => 2, 'c' => 3, 'd' => 4, 'e' => 5];
  3. echo json_encode($arr);//{"a":1,"b":2,"c":3,"d":4,"e":5}
  4. $arr2 = ['name'=>'张三','name2'=>'李四','name3'=>'王五','name4'=>'赵六'];
  5. echo json_encode($arr2,JSON_UNESCAPED_UNICODE);//{"name":"张三","name2":"李四","name3":"王五","name4":"赵六"}
  6. ?>

要注意的是 JSON_UNESCAPED_UNICODE 选项,如果我们不希望中文被编码,可以添加该选项。

2.json_decode

PHP json_decode() 函数用于对 JSON 格式的字符串进行解码,并转换为 PHP 变量。

实例

  1. <?php
  2. $json = '{"a":1,"b":2,"c":3,"d":4,"e":5}';
  3. var_dump(json_decode($json));
  4. var_dump(json_decode($json, true));当第二个参数为 TRUE 时,将返回数组, FALSE 时返回对象,默认为 FALSE
  5. ?>

以上代码执行结果为:

  1. object(stdClass)#1 (5) {
  2. ["a"] => int(1)
  3. ["b"] => int(2)
  4. ["c"] => int(3)
  5. ["d"] => int(4)
  6. ["e"] => int(5)
  7. }
  8. array(5) {
  9. ["a"] => int(1)
  10. ["b"] => int(2)
  11. ["c"] => int(3)
  12. ["d"] => int(4)
  13. ["e"] => int(5)
  14. }

二、cURL 函数

CURL是PHP的一个扩展,利用该扩展可以实现服务器之间的数据或文件传输,用来采集网络中的html网页文件、其他服务器提供接口数据等。

实例(封装cURL函数)

  1. /**
  2. * 请求接口返回内容
  3. * @param string $url [请求的URL地址]
  4. * @param string $params [请求的参数]
  5. * @param int $ipost [是否采用POST形式]
  6. * @return string
  7. */
  8. function curl_data($url, $params = false, $ispost = 0){
  9. $ch = curl_init();//创建了一个curl会话资源,成功返回一个句柄;
  10. curl_setopt($ch, CURLOPT_HTTP_VERSION, CURL_HTTP_VERSION_1_1); // 默认值,让 cURL 自己判断使用哪个版本。 (强制使用 HTTP/1.1)。
  11. curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 60); // 在尝试连接时等待的秒数。设置为0,则无限等待。
  12. curl_setopt($ch, CURLOPT_TIMEOUT, 60); // 设置超时限制防止死循环
  13. curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); // 要求结果保存到字符串中还是输出到屏幕上
  14. curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); // 爬取重定向页面
  15. curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, 0);// 对认证证书来源的检查
  16. curl_setopt($ch, CURLOPT_SSL_VERIFYHOST, 0);// 从证书中检查SSL加密算法是否存在
  17. if ($ispost) {
  18. curl_setopt($ch, CURLOPT_POST, true); // 发送一个常规的Post请求
  19. curl_setopt($ch, CURLOPT_POSTFIELDS, $params); // Post提交的数据包
  20. curl_setopt($ch, CURLOPT_URL, $url); // 设置URL
  21. } else {
  22. // GET请求,组装url
  23. if ($params) {
  24. curl_setopt($ch, CURLOPT_URL, $url.'?'.$params);
  25. } else {
  26. curl_setopt($ch, CURLOPT_URL, $url);
  27. }
  28. }
  29. $response = curl_exec($ch); // 运行cURL,请求URL,把结果复制给变量
  30. curl_close($ch); // 关闭curl连接
  31. return $response; // 返回获得的数据
  32. }

三、实际应用

请求聚合天气查询接口,实现天气查询 http://www.lonhaiy.com/tqyb/index.php

  1. <?php
  2. //引入function.php 请求文件(把cUrl封装函数放在自己创建的function.php文件中)
  3. require "function.php";
  4. if(is_post()){
  5. if($_POST['city'] != ''){
  6. //接口请求地址
  7. $url = 'http://apis.juhe.cn/simpleWeather/query';
  8. //接口请求参数
  9. $parameter = [
  10. 'city' => $_POST['city'],
  11. 'key' => '' //你自己的key
  12. ];
  13. $res = json_decode(get_url($url,$parameter),true);
  14. if($res["error_code"] == 0) {
  15. $data = $res["result"];
  16. }
  17. }else{
  18. echo "<script>alert('请输入城市名称')</script>";
  19. }
  20. }
  21. ?>
  22. <!DOCTYPE html>
  23. <html lang="en">
  24. <head>
  25. <meta charset="UTF-8">
  26. <meta name="viewport" content="width=device-width, initial-scale=1.0">
  27. <meta http-equiv="X-UA-Compatible" content="ie=edge">
  28. <title>天气预报</title>
  29. <script src="./jquery.min.js"></script>
  30. <!-- 最新版本的 Bootstrap 核心 CSS 文件 -->
  31. <link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/css/bootstrap.min.css" integrity="sha384-HSMxcRTRxnN+Bdg0JdbxYKrThecOKuH5zCYotlSAcp1+c8xmyTe9GYg1l9a69psu"
  32. crossorigin="anonymous">
  33. <!-- 最新的 Bootstrap 核心 JavaScript 文件 -->
  34. <script src="https://stackpath.bootstrapcdn.com/bootstrap/3.4.1/js/bootstrap.min.js" integrity="sha384-aJ21OjlMXNL5UyIl/XNwTMqvzeRMZH2w8c5cRVpzpU8Y5bApTppSuUkhZXN0VxHd"
  35. crossorigin="anonymous"></script>
  36. <style>
  37. .main {
  38. max-width: 750px;
  39. margin: auto;
  40. padding: 15px;
  41. }
  42. .header{
  43. padding: 30px 0;
  44. margin: auto;
  45. }
  46. .header form{
  47. text-align: center;
  48. }
  49. .form-inline .form-group {
  50. display: inline-block;
  51. margin-bottom: 0;
  52. vertical-align: middle;
  53. }
  54. blockquote{
  55. border-left: 5px solid #1b809e;
  56. }
  57. </style>
  58. </head>
  59. <body>
  60. <div class="main">
  61. <div class="header">
  62. <form class="form-inline" action="index.php" method="post">
  63. <div class="form-group">
  64. <input type="text" class="form-control" name="city" placeholder="请输入城市名称">
  65. </div>
  66. <button type="submit" class="btn btn-primary">天气查询</button>
  67. </form>
  68. </div>
  69. <?php if(isset($res)){ ?>
  70. <?php if($res["error_code"] == '0'){ ?>
  71. <div class="content">
  72. <blockquote>
  73. <p>查询结果</p>
  74. </blockquote>
  75. <h5>今日天气</h5>
  76. <table class="table table-bordered table-hover">
  77. <tr>
  78. <td>城市</td>
  79. <td><?=$data["city"]?></td>
  80. </tr>
  81. <tr>
  82. <td>温度</td>
  83. <td><?=$data["realtime"]["temperature"]?></td>
  84. </tr>
  85. <tr>
  86. <td>湿度</td>
  87. <td><?=$data["realtime"]["humidity"]?>%</td>
  88. </tr>
  89. <tr>
  90. <td>天气</td>
  91. <td><?=$data["realtime"]["info"]?></td>
  92. </tr>
  93. <tr>
  94. <td>风向</td>
  95. <td><?=$data["realtime"]["direct"]?></td>
  96. </tr>
  97. <tr>
  98. <td>风力</td>
  99. <td><?=$data["realtime"]["power"]?></td>
  100. </tr>
  101. <tr>
  102. <td>空气指数</td>
  103. <td><?=$data["realtime"]["aqi"]?>%</td>
  104. </tr>
  105. </table>
  106. <h5>未来几天天气</h5>
  107. <table class="table table-bordered table-hover">
  108. <?php foreach($data["future"] as $k=>$v){ ?>
  109. <tr>
  110. <td><?=$v["date"]?></td>
  111. <td>
  112. <p><?=$v["temperature"]?></p>
  113. <p><?=$v["weather"]?></p>
  114. <p><?=$v["direct"]?></p>
  115. </td>
  116. </tr>
  117. <?php } ?>
  118. </table>
  119. </div>
  120. <?php }elseif($res["error_code"] == '207301' || $res["error_code"] == '207302'){ ?>
  121. <div class="content">
  122. <blockquote>
  123. <p>没有查到相关信息!</p>
  124. </blockquote>
  125. </div>
  126. <?php }elseif($res["error_code"] == '10012' || $res["error_code"] == '10013'){ ?>
  127. <div class="content">
  128. <blockquote>
  129. <p>接口请求超过次数限制</p>
  130. </blockquote>
  131. </div>
  132. <?php } ?>
  133. <?php } ?>
  134. </div>
  135. </body>
  136. </html>
Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post