簡體   English   中英

帶變量的嵌套JSON字符串在PHP

[英]Nested json string with variables in php

我不會對你們說謊:我討厭嵌套數組。

因此,而不是下面的我的[工作]代碼

$query_array = Array(
    "fields" => Array ("timestamp", "user.raw", "mailbox", "verb", "backend"),
    "size"   => 1,
    "sort"   => Array (Array ("@timestamp" => Array ("order" => $varOrder))),
    "query"  => Array (
        "bool" => Array (
            "must" => Array (
                Array ("match" => Array ("verb"    => "open")),
                Array ("term"  => Array ($varField => $varValue))
            )
        )
    )
);

我想使用下面的[無效]代碼

$query_json_string = '{
    "fields" : [ "timestamp", "user.raw", "mailbox", "verb", "backend" ],
    "size"   : 1,
    "sort"   : [ { "@timestamp" : { "order" : $varOrder } } ],
    "query"  : {
        "bool": {
            "must": [
                { "match" : { "verb"    : "open" } },
                { "term"  : { $varField : $varValue } }
            ]
        }
    }
}';

這么容易維護...

但是在單引號內,變量varOrdervarFieldvarValue從未擴展(我相信)。

我如何在這個漂亮干凈的json字符串中使用變量?

JSON基本上是Javascript的關聯數組版本。

$query_array = Array(
    "fields" => Array ("timestamp", "user.raw", "mailbox", "verb", "backend"),
    "size"   => 1,
    "sort"   => Array (Array ("@timestamp" => Array ("order" => $varOrder))),
    "query"  => Array (
        "bool" => Array (
            "must" => Array (
                Array ("match" => Array ("verb"    => "open")),
                Array ("term"  => Array ($varField => $varValue))
            )
        )
    )
);

$query_json_string = json_encode($query_array);

但是,如果您對此有疑問,heredoc語法應該適合您。

$query_json_string = <<<JSON
{
    "fields" : [ "timestamp", "user.raw", "mailbox", "verb", "backend" ],
    "size"   : 1,
    "sort"   : [ { "@timestamp" : { "order" : $varOrder } } ],
    "query"  : {
        "bool": {
            "must": [
                { "match" : { "verb"    : "open" } },
                { "term"  : { $varField : $varValue } }
            ]
        }
    }
}
JSON;

// if you wanted PHP array,
$query_array = json_decode($query_json_string, true);

據我了解您的問題,您對php的數組語法根本不滿意 如果是這種情況,請不要使用語法。 相反,請使用簡單的方括號,該版本自5.4版本起可用。

這樣做,您的最終代碼可能是:

$query = [
    "fields" => ["timestamp", "user.raw", "mailbox", "verb", "backend"],
    "size"   => 1,
    "sort"   => [["@timestamp" => ["order" => $varOrder]]],
    "query"  => [
        "bool" => [
            "must" => [
                ["match" => ["verb"    => "open"]],
                ["term"  => [$varField => $varValue]]
            ]
        ]
    ]
];

這與您想要的語法相差不遠。 唯一的區別是=>而不是: 但是,還有一個額外的好處,就是不需要使用{}聲明對象

您可以將單引號改為雙引號,並轉義雙qoutes

$query_json_string = "{
    \"fields\" : [ \"timestamp\", \"user.raw\", \"mailbox\", \"verb\",     \"backend\" ],
    \"size\"   : 1,
    \"sort\"   : [ { \"@timestamp\" : { \"order\" : $varOrder } } ],
    \"query\"  : {
        \"bool\": {
            \"must\": [
                { \"match\" : { \"verb\"    : \"open\" } },
                { \"term\"  : { $varField : $varValue } }
            ]
        }
    }
}";

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM