从json自动填充对象

问题描述 投票:0回答:2

我有一个 JSON:

{
   "id":1,
   "name":"John",
   "firstname":"Doe"
}

服务器端,我做的:

$input = $request->json()->all();
$user = new User();
$user->id = $input['id'];
$user->name = $input['name'];
$user->firstname = $input['firstname'];

如果 JSON 字段和我的对象字段相同,是否可以使用 JSON 自动填充我的对象?就像下面这样?

$user = new User();
$user->fromJSON($input);
php json laravel lumen
2个回答
0
投票

是的,可以在 User 类中创建一个方法

fromJSON()
来自动从 JSON 输入填充对象属性。具体方法如下:

class User {
    public $id;
    public $name;
    public $firstname;

    public function fromJSON($json) {
        $data = json_decode($json, true);

        foreach ($data as $key => $value) {
            if (property_exists($this, $key)) {
                $this->{$key} = $value;
            }
        }
    }
}

// Example usage:
$input = '{
   "id":1,
   "name":"John",
   "firstname":"Doe"
}';

$user = new User();
$user->fromJSON($input);

// Now $user has its properties filled with values from the JSON
echo $user->id; // Outputs: 1
echo $user->name; // Outputs: John
echo $user->firstname; // Outputs: Doe

此方法

fromJSON()
将 JSON 字符串作为输入,将其解码为关联数组,然后迭代每个键值对。如果 User 类中存在同名属性,则会将 JSON 数据中的相应值分配给该属性。


0
投票

您可以使用 json_decode 函数将 JSON 字符串转换为 PHP 对象。

我已经更新了您的代码,如下所示:

$jsonString = '{"id":1,"name":"John","firstname":"Doe"}';

$userObject = json_decode($jsonString);

// If you need to convert it to an associative array, you can pass true as the second parameter
$userArray = json_decode($jsonString, true);

如果您有一个类 User 并且想要使用 JSON 字符串中的值填充其属性,您可以在 User 类中编写一个方法,该方法接受 JSON 字符串,对其进行解码,并相应地设置属性:

class User {
  public $id;
  public $name;
  public $firstname;

  public function fromJSON($jsonString) {
    $jsonObject = json_decode($jsonString);
    $this->id = $jsonObject->id;
    $this->name = $jsonObject->name;
    $this->firstname = $jsonObject->firstname;
  }
}

// Usage
$user = new User();
$user->fromJSON($jsonString);

这个简单的示例不包括错误检查或更复杂的场景,例如嵌套对象或数组。

© www.soinside.com 2019 - 2024. All rights reserved.