Php 如何从特定键的JSON字符串中检索数据
我正在使用php解码一个JSON文件,并试图只从ID为1234的数组中获取内容 例如:Php 如何从特定键的JSON字符串中检索数据,php,arrays,json,Php,Arrays,Json,我正在使用php解码一个JSON文件,并试图只从ID为1234的数组中获取内容 例如: [ { "id":"1234", "is_printed":"1", "is_refunded":"1", "order_products":[ { "id":"xyz", "order_id":"xyz", "date_created":"3434"
[
{
"id":"1234",
"is_printed":"1",
"is_refunded":"1",
"order_products":[
{
"id":"xyz",
"order_id":"xyz",
"date_created":"3434"
}
]
},
{
"id":"8910",
"is_printed":"1",
"is_refunded":"1",
"order_products":[
{
"id":"abcde",
"order_id":"abcde",
"date_created":"3434"
}
]
}
]
我只想从订单产品中检索订单id,其中id为1234
因此,我应该只获取xyz,而不是xyz和abcde。您可以循环,然后获取您想要的,确保您正确检查了级别:
$jv = json_decode($v);
foreach ($jv as $t) {
if ($t->id == 1234) {
print $t->order_products[0]->order_id;
}
}
注意,我使用first将JSON字符串$v转换为php可以处理的内容
如何知道print$t->order\u products[0]->order\u id;要查看的索引是什么?我拿走了你的JSON,var_把它扔了。然后,通过跟踪输出的结构,您可以看到所需的索引是什么
查看包含数据的完整工作代码:
$v=' [
{
"id":"1234",
"is_printed":"1",
"is_refunded":"1",
"order_products":[
{
"id":"xyz",
"order_id":"xyz",
"date_created":"3434"
}
]
},
{
"id":"8910",
"is_printed":"1",
"is_refunded":"1",
"order_products":[
{
"id":"abcde",
"order_id":"abcde",
"date_created":"3434"
}
]
}
]';
$jv = json_decode($v);
foreach ($jv as $t) {
if ($t->id == 1234) {
print $t->order_products[0]->order_id;
}
}
var_dump($jv);
它返回:
输出:
xyz
转储:
可以使用foreach并循环数组
foreach ($yourArray AS $rowInArray) {
if ($rowInArray['id'] == 1234 {
//save the value to a global array
}
}
另一个选项是使用array_column函数。我以前没有使用过这个,但您可以在这里找到有关语法的信息:使用前面的所有答案,这是您的完整代码:
$orderId = array();
$data = json_decode($jsonString);
foreach ($data as $row) {
if ($row['id'] == 1234) {
$orderId[] = $row['order_products']['order_id'];
}
}
json_解码并通过它foreach。您的json中有语法错误,即使您吃完晚饭或子数组,也会使用逗号“,”foreach修复了我的一个问题,但如何检索order_产品下的order_id?我试过你说的话,但没用。这不是一个php错误,只是一个空白。你有没有试过事先使用json_解码?它应该会成功的。另外,尝试使用var_dump$array来查看其中的内容。使用代码echo$object->{'order_products'};它显示数组,但回显$object->{'order\u products'}{'order\u id'};不起作用。niether做的版本是$object['order_products']['order_id'];如果你说$object->{'order\u products'}['order\u id'],会怎么样?第二个[]不是{}。什么都没有。这就像代码在工作,但是数组中没有任何东西——除了数组中有一些东西这一事实。
$orderId = array();
$data = json_decode($jsonString);
foreach ($data as $row) {
if ($row['id'] == 1234) {
$orderId[] = $row['order_products']['order_id'];
}
}