PHP JSON获取每个键的特定值

时间:2014-08-15 14:22:29

标签: php html json

我有一个读取JSON文件的PHP代码。下面是JSON示例的一部分:

 "Main": [{
    "count": 7,
    "coordinates": [89,77],
    "description": "Office",
  },{
    "count": 8,
    "coordinates": [123,111],
    "description": "Warehouse",
  }]

并且我正在尝试编写PHP以仅获取那些描述包含在Warehouse等标准中的信息(计数,坐标,描述)。下面的PHP示例

$validcriteria = array("Warehouse", "Parking_lot");

如果“描述”包含在有效标准中,我如何先执行if语句检查。我尝试了下面的代码,但它似乎不正常。

$JSONFile = json_decode($uploadedJSONFile, false);
foreach ($JSONFile as $key => $value)
{
    if (in_array($key['description'] , $validcriteria))
    {
        #more codes here
    }
}

我在PHP中的代码一直在工作,除非我尝试添加$key['description']以尝试首先检查描述是否有效。我上面的代码被重建以删除敏感信息,但我希望你对我想要做的事情有所了解。

4 个答案:

答案 0 :(得分:1)

尝试理解已解析的JSON字符串的结构时,请先使用print_r($JSONFile);检查其内容。在您的情况下,您会发现有一个外键'Main',它包含一个子数组数组。您将需要遍历该外部数组。

// Set $assoc to TRUE rather than FALSE
// otherwise, you'll get an object back
$JSONFile = json_decode($uploadedJSONFile, TRUE);
foreach ($JSONFile['Main'] as $value)
{
  // The sub-array $value is where to look for the 'description' key
  if (in_array($value['description'], $validcriteria))
  {
    // Do what you need to with it...
  }
}

注意:如果您希望继续在$assoc中将false参数设置为json_decode(),请检查结构以了解对象的布局方式,并使用->运算符而不是数组键。

$JSONFile = json_decode($uploadedJSONFile, FALSE);
foreach ($JSONFile->Main as $value)
{
  // The sub-array $value is where to look for the 'description' key
  if (in_array($value->description, $validcriteria))
  {
    // Do what you need to with it...
  }
}

您也可以考虑使用array_filter()进行测试:

$included_subarrays = array_filter($JSONFile['Main'], function($a) use ($validcriteria) {
  return in_array($a['description'], $validcriteria);
});
// $included_subarrays is now an array of only those from the JSON structure
// which were in $validcriteria

答案 1 :(得分:0)

鉴于您的JSON结构,您可能需要

foreach($decoded_json['Main'] as $sub_array) {
    if (in_array($sub_array['description'], $validation)) {
       ... it's there ...
    }
}

答案 2 :(得分:0)

因为你将false设置为json_decode函数的第二个参数,所以它作为一个对象返回, 如果你把它改为TRUE,那么代码就可以了。

http://php.net/manual/en/function.json-decode.php

并且您必须将键更改为值;

foreach ($JSONFile->Main as $key => $value)
{
    if (in_array($value->description, $validcriteria))
    {
        #more codes here

    }
}

此代码假设您的json文件的深度比您的示例大一个。这就是为什么$ JSONFile->主要在foreach循环中。

答案 3 :(得分:-1)

尝试使用:

if ( array_key_exists('description', $key) )