在Laravel中创建有效的json数据

时间:2017-08-30 16:56:01

标签: php json laravel

创建新用户时,我将用户名和密码(没有散列)保存在json文件和DB中,因此每次我将新用户附加到json文件时:

{
  "user3": "demo"
} {
  "user4": "demo"
} {
  "user4": "demo"
} {
  "user5": "demo"
}

代码:

$data = array($request->input('username') => $request->input('password'));
            $datos = json_encode($data);
            File::append(storage_path('archivos/datos.json'), $data);

当然上面的格式不是有效的json,我怎么能得到这个

[{
"user3": "demo"
}, {
"user4": "demo"
}, {
"user4": "demo"
}, {
"user5": "demo"
}, {
"user5": "demo"
}, {
"user5": "demo"
}, {
"user7": "demo"
 }, {
"user8": "demo"
 }]

并使用foreach读取它:

$result = File::get(storage_path('archivos/datos.json'));
$result = json_decode($result);
foreach($result as $key=>$item){
   echo $key .''. $item;
} 

2 个答案:

答案 0 :(得分:1)

首先从文件中获取字符串然后你可以使用"} {"对所有"} , {"进行str_replace,json在开始时也有[,在结尾有]所以我们添加它们:

$json = "[".str_replace('} {', '},{', $fileContent)."]";

这里我们在$ json变量中有一个json字符串,所以我们可以通过它将它转换为数组:

$users = json_decode($json);

答案 1 :(得分:0)

最快的方法是附加一些数据:

fopen('myfile.json', 'a');

但是你想存储一个数组,所以你必须阅读文件的内容,更新它并保存它。

$users = json_decode(file_get_content(storage_path('archivos/datos.json')));

$users[] = $newUser;

file_put_contents(storage_path('archivos/datos.json'), json_encode($users, JSON_PRETTY_PRINT);

你也可以制作一个单行(丑陋,但有效):

file_put_contents(storage_path('archivos/datos.json'), json_encode(json_decode(file_get_content(storage_path('archivos/datos.json')))[] = $newUser, JSON_PRETTY_PRINT);