Laravel 中的 JSON 格式

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

假设我有三个模型和表格,即学校、班级和学生。 学校和班级是一对多的关系,班级和学生也是一对多的关系。现在我正在创建一个 RESTFUL API,以这种 JSON 格式一次性发送所有这些数据:

[{
        "1": {
            "school_id": 1,
            "school_name": "Havard",
            "Class": {
                "1": {
                    "class_id": 1,
                    "school_id": 1,
                    "class": "6",
                    "Student": {
                        "1": {
                            "Student_fname": "SomeName",
                            "Student_lname": "Last Name"
                        },
                        "2": {
                            "Student_fname": "Another",
                            "Student_lname": "AnotherLast"
                        }
                    },
                    "2": {
                        "class_id": 2,
                        "school_id": 28,
                        "class": "7",
                        "Student": {
                            "1": {
                                "Student_fname": "Anotherone",
                                "Student_lname": "Last"
                            },
                            "2": {
                                "Student_fname": "New",
                                "Student_lname": "Newer"
                            }
                        }
                    }
                }
            }
        }

    },
    {
        "2": {
            "school_id": 1,
            "school_name": "AnotherSchool",
            "Class": {
                "1": {
                    "class_id": 1,
                    "school_id": 1,
                    "class": "6",
                    "Student": {
                        "1": {
                            "Student_fname": "SomeName",
                            "Student_lname": "Last Name"
                        },
                        "2": {
                            "Student_fname": "Another",
                            "Student_lname": "AnotherLast"
                        }
                    },
                    "2": {
                        "class_id": 2,
                        "school_id": 28,
                        "class": "7",
                        "Student": {
                            "1": {
                                "Student_fname": "Anotherone",
                                "Student_lname": "Last"
                            },
                            "2": {
                                "Student_fname": "New",
                                "Student_lname": "Newer"
                            }
                        }
                    }
                }
            }
        }
    }
]

如何实现这种格式? 我的这个json格式正确吗?有没有更好的方法来实现?

json laravel
5个回答
2
投票

如果像我一样,您想使用

JSON
string
格式化
Laravel
collection
请使用以下技术:

$json = collect([
    'name' => 'Test',
    'description' => 'Another awesome laravel package',
    'license' => 'MIT'
  ])->toJson(JSON_PRETTY_PRINT | JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);

echo $json;

生成的输出将具有以下格式:

{
    "name": "Test",
    "description": "Another awesome laravel package",
    "license": "MIT"
}

相同的技术可以应用于

eloquent
查询的结果。并将
JSON
写入文件到
storage

参考链接


1
投票

您可以使用像 https://github.com/thephpleague/fractalhttps://github.com/dingo/api 这样的库,或者通过在控制器中创建转换器方法(如果您愿意,也可以使用类) )

一些伪代码

<?php
class UserController extends Controller
{

    public function index(Request $request) {
        $users = Users::all(); 

        $response = []; 

        foreach ($users as $user) {
            $response[] = $this->transform($user); 
        }

    }

    public function transform(User $user) {
        return [
            'username' => $user->username,
            'age' => $user->age,
            'class' => [
                'name' => $user->school->name,
                'something' => $user->school->something
            ]
        ];
    }

}

我强烈建议在其他类中而不是在控制器本身中进行变换部分。


1
投票

对于访问此问题以获取有关 Laravel 中 JSON 格式的解决方案的人们,我建议您使用 Chrome 上的 JSON 格式化程序 扩展来测试您的 API 响应,而不是浪费时间来执行简单的任务。 这只是我个人的建议,无论如何,您都可以创建或使用插件来管理代码上的 JSON 响应。


0
投票

-1
投票

我觉得应该是这样的

[
"1": {
"school_id": 1,
    "school_name": "Havard",
    "Class": [
    "1": {
            "class_id": 1,
            "school_id": 1,
            "class": "6",
            "Student": [
                "1": {
                "Student_fname": "SomeName",
                    "Student_lname": "Last Name"
                }
            ]
         }
    ]
}
]
© www.soinside.com 2019 - 2024. All rights reserved.