2

抱歉,如果这已被问了一千次,但我找不到一个关于如何正确执行此操作的好教程,并且在 Stack 上搜索是王牌。

我有一个 JSON 文件,其中包含如下数据:

   {
      "store":"Store 1",
      "cat":"Categories",
      "general_cat":"Categories",
      "spec_cat":"Accessories"
   },
   {
      "store":"Store 1",
      "cat":"Categories",
      "general_cat":"Categories",
      "spec_cat":"Accessories"
   },

大约有50个条目。我正在尝试解析这些数据并将值存储在变量中。

到目前为止,我已经尝试过:

$string     = file_get_contents("jsonFile.json");
$json_array = json_decode($string,true);

foreach ($json_array as $key => $value){

    $store = $key -> store;
    $general_cat = $key -> general_cat;
    $spec_cat = $key -> spec_cat;

    if (!is_null($key -> mainImg_select)){
        $cat = $key -> cat;
    }

    echo $headURL;
}

这会导致“尝试获取非对象的属性”错误。我在这里做错了什么?

4

3 回答 3

12

的第二个参数json_decode告诉函数是将数据作为对象还是数组返回。

对象访问使用->符号。从json_decode使用json_decode($jsonString)或返回对象json_decode($jsonString, false)(第二个参数默认为 false

$jsonString = '{ "this_is_json" : "hello!" }';

$obj = json_decode($jsonString);

echo $obj->this_is_json // "hello!";

您还可以通过将第二个参数设置为以数组形式访问您的 json 数据true

$jsonString = '{ "this_is_json" : "hello!" }';

$arr = json_decode($jsonString, true);

echo $arr['this_is_json'] // "hello!";

在概念上更令人困惑的是,PHPjson_decode可以返回一个对象数组(而不仅仅是一个对象),也可以返回一个关联数组。

考虑以下 json 字符串。此字符串表示 json 数据结构(大括号)的“集合”(方括号)。

[
    {
        "name": "One"
    },
    {
        "name": "Two"
    }
]

如果我们将此 json 分配给变量,$string希望这将说明差异

$asObjects = json_decode($string);

$asAssociativeArray = json_decode($string, true);

foreach ($asObjects as $obj) {
    echo $obj->name;
}

foreach ($asAssociativeArray as $arr) {
    echo $arr['name'];
}
于 2013-05-16T02:32:07.577 回答
4

似乎您正在请求一个关联数组(通过将 True 作为第二个参数传递给 json_decode 函数)但试图将其用作对象。

试试$json_array = json_decode($string,false);。这将返回对象

此外,正如@MatRt 提到的,您需要使用 $value 而不是 $key 来引用对象

于 2013-05-16T02:28:33.413 回答
3

您需要使用数组语法检索值:

$item['key']

相对于

$item->key
于 2013-05-16T02:30:19.577 回答