【问题标题】:Fetching json array in php在php中获取json数组
【发布时间】:2019-05-13 08:36:27
【问题描述】:

我在获取我通过 android 应用程序使用 post 发送的 json 数组时遇到问题。

PHP 代码:

<?php
$properties_json = json_decode($_POST['property'], true);
foreach ($properties_json->properties as $pro_element) {
   echo $pro_element->property_id . '<br/>';
   echo $pro_element->property_name . '<br/>';
   echo $pro_element->property_value . '---------';
}

JSON 我发布的数组:

{
  "properties": [
    {
      "property_id": "654",
      "property_name": "Gender",
      "property_value": "Male"
    },
    {
      "property_id": "655",
      "property_name": "Name",
      "property_value": "Amin"
    },
    {
      "property_id": "656",
      "property_name": "Mobile",
      "property_value": "654-451-456"
    }
  ]
}

错误:

为 foreach() 提供的参数无效

enter image description here

【问题讨论】:

  • 你可以使用 print_r($properties_json->properties) 吗?什么是输出?
  • 你在json_decode中设置了true,所以是数组。不反对 - $properties_json['properties']
  • @splash58 没有区别
  • 通过var_dump()检查$properties_json的内容

标签: php arrays json


【解决方案1】:

json_decode($_POST['property'], true); 返回一个数组。在您的代码中,您将其用作对象。这是正确的方法:

<?php
$properties_json = json_decode($_POST['property'], true);

foreach ($properties_json['properties'] as $pro_element) {
   echo $pro_element['property_id'] . '<br/>';
   echo $pro_element['property_name'] . '<br/>';
   echo $pro_element['property_value'] . '---------';
}

编辑:

您可以检查$_POST['property']是否存在且不为空。

<?php
if(isset($_POST['property'])){
    if($_POST['property'] != null and $_POST['property'] != ""){
        $properties_json = json_decode($_POST['property'], true);

        foreach ($properties_json['properties'] as $pro_element) {
            echo $pro_element['property_id'] . '<br/>';
            echo $pro_element['property_name'] . '<br/>';
            echo $pro_element['property_value'] . '---------';
        }
    }else{
        echo "POST['property'] is empty";
    }
}else{
    echo "Missing POST['property']";
}

【讨论】:

  • 你也应该检查 $properties_json 不是 NULL 虽然
【解决方案2】:

您引用 $properties_json-&gt;properties 就好像它是一个对象,但您通过执行 json_decode($_POST['property'], true); 将 JSON 转换为数组(请参阅 documentation of json_decode

您需要将 true 更改为 false 或执行 foreach ($properties_json['properties'] as $pro_element) {

【讨论】:

  • 为 foreach() 提供的参数无效
  • 你确定你确实发布过任何东西并且 $_POST['property'] 包含一个 JSON 数组吗?
  • 如果我执行这个 properties as $pro_element) { echo $pro_element->property_id 。 '
    ';回声 $pro_element->property_name 。 '
    ';回声 $pro_element->property_value 。 '---------';我得到了预期的结果:654
    性别
    男---------
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-05-12
  • 1970-01-01
  • 2017-12-16
  • 1970-01-01
  • 2013-08-02
  • 2015-02-02
  • 1970-01-01
相关资源
最近更新 更多