【问题标题】:How to get JSON from URL in PHP如何在 PHP 中从 URL 获取 JSON
【发布时间】:2018-03-01 18:13:17
【问题描述】:

我正在使用这组数据进行 Ajax 调用:

"type":"alter",
"param":{
    "key1":"value1",
    "key2":"value2"
}

在 PHP 中,我通过以下方式处理:

• 获取file_get_contents('php://input')

type=alter&param%5Bkey1%5D=value1&param%5Bkey2%5D=value2

• 由& 对 URL 进行解码和切片:

[
    "type=alter",
    "param[key1]=value1",
    "param[key2]=value2"
]

• 由= 进一步切片:

[
    [
        "type",
        "alter"
    ],
    [
        "param[key1]",
        "value1"
    ],
    [
        "param[key2]",
        "value2"
    ]
]

• 然后创建一个对象$data,每个索引0作为键,索引1作为值:

$data = array(
    "type"=>"alter",
    "param[key1]"=>"value1",
    "param[key2]"=>"value2"
)

问题:

当我在 Ajax 中的数据集严格为 key=value 时,这不是问题,但当我添加数组或对象作为值时,它会变得混乱。我想处理出现在 Ajax 中的 PHP 数据集。我想要的结果是:

$data = array(
    "type"=>"alter",
    "param"=>array(
        "key1"=>"value1",
        "key2"=>"value2"
    )
)

这样当我得到$data['param'] 时,它会给我所有的参数键。我可以手动完成,但我认为可能有更简单的方法可以做到这一点。特别是如果我可以立即从file_get_contents('php://input') 获得我想要的对象。

【问题讨论】:

  • 您这样做是否有原因可能是最复杂的方式?当然使用$_GET(或$_POST)和json_decode会更容易?
  • 这和 JSON 有什么关系?
  • 您的数据是表单 url 编码的。您可以直接从 $_POST 读取它,它将被自动解析。
  • 我正在使用file_get_contents('php://input'),因为我返回的数据普遍用于 GET、POST、PUT 和 DELETE 方法。 @iainn .. 谢谢!这正是我想要的!

标签: php arrays json object url


【解决方案1】:

有一个解析参数字符串的内置函数:parse_str()

<?php
$in = 'type=alter&param%5Bkey1%5D=value1&param%5Bkey2%5D=value2';

parse_str($in, $data);

print_r($data);

/*
Array
(
    [type] => alter
    [param] => Array
        (
            [key1] => value1
            [key2] => value2
        )

)
*/

如果您可以访问 $_POST 然后这样做,您还可以在访问之前检查 $_POST 是否为空。

<?php

if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    if (empty($_POST)) {
        parse_str(file_get_contents('php://input'), $_POST);
    }

    print_r($_POST);

    /*
    Array
    (
        [type] => alter
        [param] => Array
            (
                [key1] => value1
                [key2] => value2
            )

    )

    */
}

【讨论】:

    猜你喜欢
    • 2017-06-03
    • 1970-01-01
    • 2016-08-06
    • 2015-10-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多