使用以下格式从PHP中的JSON数组中获取值?

使用以下格式从PHP中的JSON数组中获取值?,php,arrays,json,multidimensional-array,arrayobject,Php,Arrays,Json,Multidimensional Array,Arrayobject,我从与我一起工作的Android开发人员那里获得了这个数组,我必须从以下数组中获得keyname的值: [ { "data":"[{\"name\":\"step 1 kdfhghdkgjdf\\nkjdhfgkjhdkjghd\\nkdfjhgkjdhfg\\n\\n\\ndfjhgkjdfjhgdfgd\\n\"},{\"name\":\"step 2 dhfgkjdfhkhkjchjkfd\\ndkjhjdf\\njhkdfhkghdkfhgkdhg\\n\\n\\n

我从与我一起工作的Android开发人员那里获得了这个数组,我必须从以下数组中获得key
name
的值:

[ 
   { 
      "data":"[{\"name\":\"step 1 kdfhghdkgjdf\\nkjdhfgkjhdkjghd\\nkdfjhgkjdhfg\\n\\n\\ndfjhgkjdfjhgdfgd\\n\"},{\"name\":\"step 2 dhfgkjdfhkhkjchjkfd\\ndkjhjdf\\njhkdfhkghdkfhgkdhg\\n\\n\\ndfjhgkjdfhgdfhgkjdhfgkjhdf\"},{\"name\":\"step 3 kkkkkkkkkk\"},{\"name\":\"step 4 ljlejrhlflhgf\\n\\n\\ndfhjk\"}]",
      "status":1
   }
]
我尝试了以下几点:

 <?php
    $s = '[
  {
    "data": "[{\"name\":\"step 1 kdfhghdkgjdf\\nkjdhfgkjhdkjghd\\nkdfjhgkjdhfg\\n\\n\\ndfjhgkjdfjhgdfgd\\n\"},{\"name\":\"step 2 dhfgkjdfhkhkjchjkfd\\ndkjhjdf\\njhkdfhkghdkfhgkdhg\\n\\n\\ndfjhgkjdfhgdfhgkjdhfgkjhdf\"},{\"name\":\"step 3 kkkkkkkkkk\"},{\"name\":\"step 4 ljlejrhlflhgf\\n\\n\\ndfhjk\"}]",
    "status": 1
  }
]';
    $obj = json_decode($s,true);
    echo $obj[0]['data']
    ?> 
但是我只需要键
name
的值,比如:

step 1 kdfhghdkgjdf kjdhfgkjhdkjghd kdfjhgkjdhfg dfjhgkjdfjhgdfgd
step 2 dhfgkjdfhkhkjchjkfd dkjhjdf jhkdfhkghdkfhgkdhg dfjhgkjdfhgdfhgkjdhfgkjhdf
step 3 kkkkkkkkkk
.
.
.
我的问题与此类似: 只是格式不同


我可以获得这种格式的值吗?如果是,怎么做?如果没有,格式是否不正确?

首先,在
“data”
字段中没有json结构,只有一个包含json数据的字符串

因此,在将数据转换为常量值时,您做得不对。你必须先把所有的反斜杠加倍

然后您可以获取
“data”
元素并再次执行
json\u解码

<?php
    $s = '[
  {
    "data": "[{\\"name\\":\\"step 1 kdfhghdkgjdf\\\\nkjdhfgkjhdkjghd\\\\nkdfjhgkjdhfg\\\\n\\\\n\\\\ndfjhgkjdfjhgdfgd\\\\n\\"},{\\"name\\":\\"step 2 dhfgkjdfhkhkjchjkfd\\\\ndkjhjdf\\\\njhkdfhkghdkfhgkdhg\\\\n\\\\n\\\\ndfjhgkjdfhgdfhgkjdhfgkjhdf\\"},{\\"name\\":\\"step 3 kkkkkkkkkk\\"},{\\"name\\":\\"step 4 ljlejrhlflhgf\\\\n\\\\n\\\\ndfhjk\\"}]",
    "status": 1
  }
]';
    $obj = json_decode($s,true);
    $data = json_decode($obj[0]['data'], true);

    foreach($data as $item) {
      print($item['name'] . "\r\n");
    }

假设
$obj[0]['data']
实际拥有您发布的JSON,只需解码并提取
名称
列:

foreach(array_column(json_decode($obj[0]['data'], true), 'name') as $name) {
    echo $name;
}

告诉Android开发人员再次正确提供json数据。这当然是有效的JSON,但它看起来像JSON中的JSON。我这样说是因为他/她在服务器端使事情变得不必要的复杂。你说的“你想要密钥
名称
的值”是什么意思?每个索引都是这些字符串之一的数组就足够了吗?这里的一个主要问题是(一些)数据是双重编码的。这需要由发送数据的应用程序修复。处理这种问题不是服务器的工作。让他们发送一个连贯的JSON对象,而不是JSON中愚蠢的JSONformat@Shubham更新零件中的数据与顶部的数据完全相同。有什么区别?即使经过编辑,基本点仍然存在。数据仍然是JSON中的JSON,它仍然需要在源代码处进行更正,以使其成为一个单一的对象,因此处理起来简单且可预测。和你的android开发者谈谈,解释一下情况。我发布了格式化的JSON,请再次检查这个问题。我已经编辑了这个问题。@Shubham,这不会改变我的答案。在php中将斜杠放入字符串常量时,必须通过添加斜杠来转义斜杠。答案中的代码不会给出任何输出!它会输出每个“名称”项。我再检查一遍。别忘了
@MaroofMandal是的,它忘了。演示:。然而,如果数据在发送时采用合理的格式,那就更好了。。。虽然IMHO建议最好先将数据作为单个对象发送
foreach(array_column(json_decode($obj[0]['data'], true), 'name') as $name) {
    echo $name;
}