【发布时间】:2020-01-25 19:56:51
【问题描述】:
我从与之合作的 Android 开发人员那里得到了这个数组,我必须从以下数组中获取键 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 "
},
{
"name": "step 2 dhfgkjdfhkhkjchjkfd dkjhjdf jhkdfhkghdkfhgkdhg dfjhgkjdfhgdfhgkjdhfgkjhdf"
},
{
"name": "step 3 kkkkkkkkkk"
},
{
"name": "step 4 ljlejrhlflhgf dfhjk"
}
]
但我只想要键 name 的值,例如:
step 1 kdfhghdkgjdf kjdhfgkjhdkjghd kdfjhgkjdhfg dfjhgkjdfjhgdfgd
step 2 dhfgkjdfhkhkjchjkfd dkjhjdf jhkdfhkghdkfhgkdhg dfjhgkjdfhgdfhgkjdhfgkjhdf
step 3 kkkkkkkkkk
.
.
.
我的问题与此类似: Get value from JSON array in PHP 除了格式不同。
我可以获取这种格式的值吗?如果是这样,怎么做?如果不是,是格式不正确吗?
【问题讨论】:
-
告诉 Android 开发者再次正确地提供 json 数据。这当然是有效的 JSON,但它看起来像 JSON 中的 JSON。我这么说是因为他/她在服务器端让事情变得不必要地复杂。
-
你是什么意思“你想要键
name的值”?每个索引都是这些字符串之一的数组就足够了吗? -
这里问题的很大一部分是(部分)数据是双重编码的。这需要通过发送数据的应用程序来解决。处理这类问题不是服务器的工作。让他们发送一个连贯的 JSON 对象,而不是这种愚蠢的 JSON-within-JSON 格式
-
@Shubham 更新部分中的数据与顶部完全相同。有什么区别?
-
即使在编辑之后,基本点仍然存在。数据仍然是 JSON-within-JSON 并且仍然需要从源头进行更正以使其全部成为一个对象,因此处理起来简单且可预测。与您的 Android 开发人员交谈并说明情况。
标签: php arrays json multidimensional-array arrayobject