我想以以下格式在JSON文件中进行搜索:
{
"success": true,
"msg": "",
"obj": [
{
"id": 1,
"up": 546636462,
"down": 4172830061,
"total": 53687091200,
"name": "حامد ",
"enable": true,
"expiryTime": 1667049201686,
"listen": "",
"dork": 23050,
"net": "girltik",
"settings": "{\n \"clients\": [\n {\n \"id\": \"f8c36812-11e0-47c4-9880-2c8ff9310c49\",\n \"alterId\": 0\n }\n ],\n \"disableInsecureEncryption\": false\n}",
"streamSettings": "{\n \"network\": \"ws\",\n \"security\": \"none\",\n \"wsSettings\": {\n \"path\": \"/\",\n \"headers\": {}\n }\n}",
"tag": "inbound-23050",
"sniffing": "{\n \"enabled\": true,\n \"destOverride\": [\n \"http\",\n \"tls\"\n ]\n}"
},
{
"id": 2,
"up": 25559864,
"down": 630133850,
"total": 5368709120,
"remark": "احمد ",
"enable": true,
"expiryTime": 1667051159682,
"listen": "",
"dork": 36606,
"net": "girltik",
"settings": "{\n \"clients\": [\n {\n \"id\": \"902b0800-6bbd-4874-f7f8-980deb8d37e8\",\n \"alterId\": 0\n }\n ],\n \"disableInsecureEncryption\": false\n}",
"streamSettings": "{\n \"network\": \"ws\",\n \"security\": \"none\",\n \"wsSettings\": {\n \"path\": \"/\",\n \"headers\": {}\n }\n}",
"tag": "inbound-36606",
"sniffing": "{\n \"enabled\": true,\n \"destOverride\": [\n \"http\",\n \"tls\"\n ]\n}"
}
]
}我希望通过word f8c36812-11e0-47c4-9880-2c8ff9310c49在settings属性中对其进行筛选,以便结果数组仅包含匹配的对象:
{
"success": true,
"msg": "",
"obj": [
{
"id": 1,
"up": 546636462,
"down": 4172830061,
"total": 53687091200,
"remark": "حامد پاشائی",
"enable": true,
"expiryTime": 1667049201686,
"listen": "",
"port": 23050,
"protocol": "vmess",
"settings": "{\n \"clients\": [\n {\n \"id\": \"f8c36812-11e0-47c4-9880-2c8ff9310c49\",\n \"alterId\": 0\n }\n ],\n \"disableInsecureEncryption\": false\n}",
"streamSettings": "{\n \"network\": \"ws\",\n \"security\": \"none\",\n \"wsSettings\": {\n \"path\": \"/\",\n \"headers\": {}\n }\n}",
"tag": "inbound-23050",
"sniffing": "{\n \"enabled\": true,\n \"destOverride\": [\n \"http\",\n \"tls\"\n ]\n}"
}
]
}如何使用PHP从JSON文件中筛选数组?
发布于 2022-10-26 14:15:47
您的json内容结构出现了语法错误,这是正确的版本json,需要脚本。
$str = '{
"success": true,
"msg": "",
"obj": [
{
"id": 1,
"up": 546636462,
"down": 4172830061,
"total": 53687091200,
"name": "حامد ",
"enable": true,
"expiryTime": 1667049201686,
"listen": "",
"dork": 23050,
"net": "girltik",
"settings": {"clients": [{ "id": "f8c36812-11e0-47c4-9880-2c8ff9310c49","alterId": 0 } ], "disableInsecureEncryption": false},
"streamSettings": { "network": "ws", "security": "none", "wsSettings": { "path": "/", "headers": {} }},
"tag": "inbound-23050",
"sniffing": { "enabled": true, "destOverride": [ "http", "tls" ]}
},
{
"id": 2,
"up": 25559864,
"down": 630133850,
"total": 5368709120,
"remark": "احمد ",
"enable": true,
"expiryTime": 1667051159682,
"listen": "",
"dork": 36606,
"net": "girltik",
"settings": { "clients": [ { "id": "902b0800-6bbd-4874-f7f8-980deb8d37e8","alterId": 0 } ], "disableInsecureEncryption": false},
"streamSettings": { "network": "ws", "security": "none", "wsSettings": { "path": "/", "headers": {} }},
"tag": "inbound-36606",
"sniffing": { "enabled": true, "destOverride": [ "http", "tls" ]}
}
]
}';
$key = "f8c36812-11e0-47c4-9880-2c8ff9310c49";
$json = json_decode($str,true);
foreach ($json['obj'] as $item) {
foreach($item['settings']['clients'] as $setting){
if($setting['id']==$key) {
print_r($item);
}
}
}发布于 2022-10-26 14:04:45
您可以使用函数json_decode() (https://www.php.net/manual/fr/function.json-decode.php)。您将有一个可以探索的数组。
使用这个数组,您可以在列"setings“上使用函数strpos() (https://www.php.net/manual/fr/function.strpos.php),如果给定的单词不存在,该函数将给出假的。否则它会给你他的位置。有了这个信息,你就能知道单词是存在的。
编辑:
您还可以直接与整个json一起使用函数strpos()。
https://stackoverflow.com/questions/74208906
复制相似问题