【问题标题】:Convert a series of PHP variables to a JSON object [duplicate]将一系列 PHP 变量转换为 JSON 对象 [重复]
【发布时间】:2014-03-04 15:10:59
【问题描述】:

我有一系列 PHP 变量:

$a = "a";
$b = "b";
$c = "c";

and so on...

如何将所有这些变量转换为一个 JSON 对象?这可能吗?

【问题讨论】:

  • 你知道所有变量的名字吗?
  • 是的,我知道 json_encode 存在,但我只将它用于一个变量,我可以对各种变量使用相同的函数吗?
  • 创建一个 vars 数组,然后 json 对其进行编码
  • @MONZTAAA 是的。一般来说,如果你将这些变量存储在一起,你会希望它们至少在一个非关联数组中。但是,如果每个都有不同的用法,例如$a 是苹果制造商列表,$b 是用户列表,那么您需要创建一个关联数组。

标签: php json variables object


【解决方案1】:

你可能不应该有这样的结构。这就是数组的用途。

您当前将数据存储为顺序字符串。这是一个坏主意。当您有可以组合在一起的数据时,使用数组几乎总是更好。这让事情变得容易多了。

现在回答你原来的问题:


如果变量个数已知,则可以简单地先创建一个数组,然后使用json_encode() 创建 JSON 字符串:

$arr = array($a, $b, $c);
$json = json_encode($arr);

如果事先不知道变量名称,您可以使用get_defined_vars() 获取已定义变量的列表。

$arr = array_filter(get_defined_vars(), 'is_string');
echo json_encode($arr);

这是一个坏主意。这仅在所有变量都包含在 JSON 表示中时才有效。例如,如果您在代码中定义了私有变量 $somePrivateData,则 JSON 字符串也将包含该变量的值。

【讨论】:

  • 这就是我想要的。为避免您谈到的问题,您可以简单地使用 call_user_func() - pastie.org/8860516 的闭包定义一个新范围但是我同意您的观点,使用 get_defined_vars() 通常应该会让您的警钟响起。
  • @ThomasDavidPlat:为什么,省去麻烦,改用数组。问题解决了!
  • 确实如此。刚刚编辑了我的评论。不应该这样做。但是,如果我们想匹配可能是解决方案的问题的规范。从一开始就使用数组当然是所有实践中最好的。
  • @ThomasDavidPlat:这就是为什么我把它 bold :)
  • @AmalMurali 有人告诉我使用 JSON,因为我稍后将使用 ajax 来用这些数据填充字段。这是不正确的吗?
【解决方案2】:

您可以将变量转换为使用json_encode() (docs)。通常,这是通过传递一个数组来使用的:

$array = array($a, $b, $c);

$result = json_encode($array);

编辑(来自 cmets):

如果您想分隔每个值,您可以(正如您在 cmets 中提到的)分别对每个字符串调用编码函数。例如,您仍然可以将它们放入一个数组并使用

$result = array_map('json_encode', $array);

$result 将包含 3 个 json 编码的字符串,但变量本身仍然是一个数组。

当然,你仍然可以使用:

$a = json_encode($a);
$b = json_encode($b);
$c = json_encode($c);

【讨论】:

  • 好的,谢谢!实际上有指向编码的 PHP 文档链接,但是对于答案行有一个小脑袋放屁。好地方!
  • 看起来不错!我将对其进行测试并在测试后立即将其标记为好 xD
  • @Sean 我试过你的代码,但我发现了一个问题。它将所有内容返回到同一个字符串中。我希望每个值都是独立的,并以某种方式作为对象工作。这可能吗?
  • 来自 cmets 的编辑答案!
【解决方案3】:

也许这可以帮助你: json_encode function

【讨论】:

    猜你喜欢
    • 2021-03-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-26
    • 2015-01-02
    • 1970-01-01
    • 2020-11-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多