在 PHP 中检索键名中带有点的 json 值时获取未定义的索引 [duplicate]

Getting undefined index when retrieving json value of key name having a dot within in PHP [duplicate]

提问人:Ooker 提问时间:1/13/2022 更新时间:1/13/2022 访问量:1345

问:

我的JSON文件具有以下结构:

[
  {
    "n.name": "name1",
    "n.section": ["section1"]
  },
  {
    "n.name": "name2",
    "n.section": ["section2a", "section2b"]
  },

解析它并且没有错误:

$input = file_get_contents(__DIR__ . "/node.json");
$jsonclean = removeBOM($input);
$data = json_decode($jsonclean, true);
echo 'Error code: '. $error; //Error code: 0

我只想回显键的值(例如)。但是,使用产量:n.namename1 name2 name3...echo $data['n.name'];

注意:未定义索引:n.name

根据 “Notice: Undefined variable”、“Notice: Undefined index” 和 “Notice: Undefined offset” 使用 PHP,这只是 PHP 更安全的一种方式,我的方法在理论上应该有效。然后我尝试:

$value = isset($_POST['n.name']) ? $_POST['n.name'] : '';
$value = !empty($_POST['n.name']) ? $_POST['n.name'] : '';
echo $value;

但它什么也没打印。我不确定这是否是调试的正确方法?

php 数组 json 命名约定 undefined-index

评论

1赞 Gregor 1/13/2022
你检查过输出吗?print_r($data);
0赞 Ooker 1/13/2022
@Gregor没关系

答:

2赞 Silvio Ney 1/13/2022 #1

json 是一个项目数组,因此当您使用 json_decode 对其进行解码时,您应该遍历每个项目并检索所需的密钥。例:

$json = '[
  {
    "n.name": "name1",
    "n.section": ["section1"]
  },
  {
    "n.name": "name2",
    "n.section": ["section2a", "section2b"]
  }]';

  $data = json_decode($json, true);

  foreach($data as $item) {
      echo $item['n.name'] . "<br>";
  }

输出:

name1
name2

评论

0赞 Ooker 1/13/2022
啊,我明白了。起初我尝试.和 和有什么不一样?$data['n.name']foreach($data as $item)foreach ($data as $key => $val)
0赞 Gregor 1/13/2022
您可以像 .$data[0]['n.name']
0赞 Silvio Ney 1/13/2022
你应该使用一些循环逻辑来遍历你的数组或使用 $data[0]['n.name']、$data [1]['n.name'] 等,但这不是一个好主意。你至少需要研究数组。