【问题标题】:PHP: how can I access JSON objectPHP:如何访问 JSON 对象
【发布时间】:2021-11-29 07:50:42
【问题描述】:

我正在发送这个 JSON:

[{"tipo":""},{"activo":""},{"titulo":"Servicoasd B"},{"texto":"asdasdasd"}]

通过 post 方法到一个 php 文件。

我愿意

$obj = json_decode($_POST['sentJson']);

但是,我似乎无法访问 JSON 的元素。

var_dump(($obj));

显示对象:

array(4) {
  [0]=>
  object(stdClass)#2 (1) {
    ["tipo"]=>
    string(0) ""
  }
  [1]=>
  object(stdClass)#3 (1) {
    ["activo"]=>
    string(0) ""
  }
  [2]=>
  object(stdClass)#4 (1) {
    ["titulo"]=>
    string(9) "Servico B"
  }
  [3]=>
  object(stdClass)#5 (1) {
    ["texto"]=>
    string(6) "asdasd"
  }
}

但如果我尝试

$obj['texto'];
$obj->{'texto'};
$obj[0]['texto'];
$obj[0];

它显示“未定义的索引文本”或“试图获取非对象的属性”和最后一个“类stdClass的对象无法转换为字符串”。我对 PHP 很陌生,但我似乎仍然没有注意到我做错了什么。任何帮助将不胜感激。

【问题讨论】:

  • 技术说明:没有“JSON 对象”之类的东西。有 JSON,它是一个字符串,还有“通过解析该 JSON 获得的对象”。是的,在询问编程问题时,技术差异很重要。至于你的问题:当然,你的 JSON 是一个对象的 array (看看 JSON 本身,这很清楚这个事实),所以 $obj 是一个数组,你可以访问它的元素使用$obj[0] 等。
  • $obj 似乎是一个数组...
  • $obj[3]->texto

标签: php json post


【解决方案1】:

您的 JSON 是一个由四个完全不同的对象组成的序列化数组,因此当您运行 json_decode 时,您会得到:一个数组。

如果您想访问该数组中的对象,请像访问任何其他索引数组一样访问它们:

$list = json_decode(...);
foreach($list as $obj) {
  var_dump($obj)
}

或者使用普通的旧数字访问明确地定位它们。

$list = json_decode(...);
$last = $list[3];
$text = $last->texto;

但实际上你应该问的问题是为什么这是你得到的 JSON。每个位置都有完全不同的对象的数组是可怕的数据,应该修复。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-02-28
    • 2012-06-06
    • 1970-01-01
    • 1970-01-01
    • 2018-05-30
    • 2021-05-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多