首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用PHP在JSON中搜索

用PHP在JSON中搜索
EN

Stack Overflow用户
提问于 2022-10-26 13:46:49
回答 2查看 50关注 0票数 0

我想以以下格式在JSON文件中进行搜索:

代码语言:javascript
复制
{
  "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-2c8ff9310c49settings属性中对其进行筛选,以便结果数组仅包含匹配的对象:

代码语言:javascript
复制
{
  "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文件中筛选数组?

EN

回答 2

Stack Overflow用户

发布于 2022-10-26 14:15:47

您的json内容结构出现了语法错误,这是正确的版本json,需要脚本。

代码语言:javascript
复制
$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);
                }
    }
}
票数 1
EN

Stack Overflow用户

发布于 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()

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/74208906

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档