【问题标题】:How to import JSON file into database如何将 JSON 文件导入数据库
【发布时间】:2017-11-23 04:32:22
【问题描述】:

我在文件夹 database\data\countries.json 中有 json 文件,并且我有 CountriesTableSeeder.php

我想将 countries.json 中的所有数据播种到我的表 Country 中。但是会出现错误Trying to get property of non-object

我已按照我找到的步骤进行操作,但仍然出现错误。

这是我的模型:

protected $fillable = ['country_name', 'iso_code'];

这是我的播种机代码:

public function run()
{
  $countryJson = File::get("database/data/countries.json");
  $data = json_decode($countryJson, true);
  foreach ($data as $obj) {
    Country::create(array(
      'country_name' => $obj->name, 'iso_code' => $obj->sortname
    ));
  }
}

【问题讨论】:

  • 您是否通过测试$countryJson 的存在来确保您拥有该文件?
  • 是的,我有@user10089632 如果我没有该文件,我的命令提示符将显示错误File does not exist at path database/data/countries.json
  • 你已经将json转换成数组,所以不会有对象$obj->name
  • 那么,我该怎么办? @Rafee
  • print_r($data) 然后退房。你会自动发现的。你需要关注@ankit的回答,希望能解决。

标签: php json laravel


【解决方案1】:

您需要在 foreach 中传递相同的变量,同时通过检查 dd($data); 确保您有 name 元素;并且您需要通过 $obj['name'] 而不是通过 $obj->name 获取数组元素,因为它不是对象。

$data = json_decode($countryJson, true);
        foreach ($data['countries'] as $obj) {
            Country::create(array(
              'country_name' => $obj['name'], 'iso_code' => $obj['sortname']
              ));
        }

【讨论】:

  • 对不起,我犯了一个错误..我已经编辑了我的问题..变量是一样的,但我仍然得到同样的错误
  • 你是否通过 dd($data) 检查了你的数组?,检查我更新了答案
  • 如何检查 dd($data)?错误显示在命令提示符中,而不是在我的 UI 中
  • 你检查了我更新的答案吗,你需要通过 $obj['name'] 获取名称,你做了改变吗?
  • undefined name.. 但我已经得到了答案。感谢您的帮助。让我修复你的代码
猜你喜欢
  • 2014-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-01
  • 1970-01-01
  • 2017-12-19
  • 2019-07-09
  • 2012-10-24
相关资源
最近更新 更多