jq的json.parse 和php中的decode_json endecode_json

本文介绍PHP中的json_decode函数,详细解释其如何将JSON格式的字符串转换为PHP变量,并讨论其两个参数的作用:待解码的JSON字符串及是否返回关联数组。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.json_decode()

json_decode
(PHP 5 >= 5.2.0, PECL json >= 1.2.0)

json_decode — 对 JSON 格式的字符串进行编码

说明
mixed json_decode ( string $json [, bool $assoc ] )
接受一个 JSON 格式的字符串并且把它转换为 PHP 变量

参数

json
待解码的 json string 格式的字符串。

assoc
当该参数为 TRUE 时,将返回 array 而非 object 。


返回值
Returns an object or if the optional assoc parameter is TRUE, an associative array is instead returned.

import base64 from Crypto.Cipher import AES import requests import json import urllib3 # 禁用SSL警告 urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning) # 密钥IV(根据实际逆向结果修改) KEY = b'd0a7e7997bd*6d2d' # 16字节密钥 IV = b'9c4e4369e7e3b5ad' # 16字节IV # 手动指定的IP地址(替换为实际获取的IP) API_IP = "123.123.123.123" # 替换为实际IP def decrypt_data(encrypted_data): """解密榜单数据""" try: decoded = base64.b64decode(encrypted_data) iv = decoded[:16] ciphertext = decoded[16:-16] tag = decoded[-16:] cipher = AES.new(KEY, AES.MODE_GCM, nonce=iv) plaintext = cipher.decrypt_and_verify(ciphertext, tag) return json.loads(plaintext.decode('utf-8')) except Exception as e: print(f"解密失败: {e}") return None def get_rank_data(category_id=5): """获取榜单数据""" # 使用IP地址构造URL url = f"https://{API_IP}/api/rank/list?cid={category_id}" headers = { "User-Agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/138.0.0.0 Safari/537.36 Edg/138.0.0.0", "Referer": f"https://www.chinaindex.net/ranklist/{category_id}", "Host": "www.chinaindex.net", # 关键:设置Host头部 "Accept": "text/html,application/xhtml+xml,application/xml;q=0.9,image/avif,image/webp,image/apng,*/*;q=0.8,application/signed-exchange;v=b3;q=0.7", "Accept-Language": "zh-CN,zh;q=0.9,en;q=0.8", } try: print(f"正在请求: {url}") response = requests.get(url, headers=headers, verify=False, timeout=10) print(f"响应状态码: {response.status_code}") if response.status_code == 200: # 检查响应内容 try: json_data = response.json() if 'data' in json_data: encrypted_data = json_data['data'] return decrypt_data(encrypted_data) else: print("响应中缺少 'data' 字段") print(f"完整响应: {json_data}") except json.JSONDecodeError: print("响应不是有效的JSON格式") print(f"响应内容: {response.text[:500]}...") else: print(f"请求失败: HTTP {response.status_code}") print(f"响应内容: {response.text[:500]}...") except Exception as e: print(f"请求异常: {e}") return None if __name__ == "__main__": # 获取数据 print("开始获取榜单数据...") rank_data = get_rank_data(5) if rank_data: print("\n解密成功! 榜单数据示例:") if 'list' in rank_data: for i, item in enumerate(rank_data['list'][:5]): print(f"{i + 1}. {item.get('name', '未知')} - 指数: {item.get('index', '未知')}") else: print("榜单数据中缺少 'list' 字段") # 保存完整数据 with open('rank_data.json', 'w', encoding='utf-8') as f: json.dump(rank_data, f, ensure_ascii=False, indent=2) print("数据已保存到 rank_data.json") else: print("未能获取榜单数据")
最新发布
07-06
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值