如何从JSON字符串中检索特定键的数据

时间:2014-11-27 14:55:43

标签: 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":"8910",
      "is_printed":"1",
      "is_refunded":"1",
      "order_products":[
         {
            "id":"abcde",
            "order_id":"abcde",
            "date_created":"3434"
         }
      ]
   }

 ]

我想从order_id只检索身份order_products的地方检索1234

所以我应该只获得xyz而不是xyzabcde

3 个答案:

答案 0 :(得分:0)

你可以循环然后获得你想要的那些,确保你正确检查水平:

$jv = json_decode($v);

foreach ($jv as $t) {
   if ($t->id == 1234) {
      print $t->order_products[0]->order_id;
   }
}

注意我首先使用json_decode()将JSON字符串$v转换为php可以处理的内容。

知道print $t->order_products[0]->order_id;是要查看的索引的方法是什么?好吧,我拿了你的JSON和var_dump编辑它。然后,通过遵循输出结构,您可以看到您需要的确切索引。


查看包含数据的完整工作代码:

$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

转储:

array(2) {
[0]=>
object(stdClass)#1 (4) {
    ["id"]=>
    string(4) "1234"
    ["is_printed"]=>
    string(1) "1"
    ["is_refunded"]=>
    string(1) "1"
    ["order_products"]=>
    array(1) {
    [0]=>
    object(stdClass)#2 (3) {
        ["id"]=>
        string(3) "xyz"
        ["order_id"]=>
        string(3) "xyz"
        ["date_created"]=>
        string(4) "3434"
    }
    }
}
[1]=>
object(stdClass)#3 (4) {
    ["id"]=>
    string(4) "8910"
    ["is_printed"]=>
    string(1) "1"
    ["is_refunded"]=>
    string(1) "1"
    ["order_products"]=>
    array(1) {
    [0]=>
    object(stdClass)#4 (3) {
        ["id"]=>
        string(5) "abcde"
        ["order_id"]=>
        string(5) "abcde"
        ["date_created"]=>
        string(4) "3434"
    }
    }
}
}

答案 1 :(得分:0)

你可以使用foreach并循环数组

foreach ($yourArray AS $rowInArray) {
 if ($rowInArray['id'] == 1234 {
   //save the value to a global array
  }
}

其他选项是使用" array_column()"功能。我之前没有使用过这个,但你可以在这里找到与语法相关的信息:http://php.net/manual/en/function.array-column.php

答案 2 :(得分:0)

使用以前的所有答案都有完整的代码:

$orderId = array();
$data = json_decode($jsonString);
foreach ($data as $row) {
    if ($row['id'] == 1234) {
        $orderId[] = $row['order_products']['order_id'];
    }
}