如何拆分json-使用Laravel

时间:2019-03-30 18:38:17

标签: php arrays json laravel

我想用邮递员拆分json对象,这是我的身体要求,我用的是laravel框架,我是新人,我不知道如何拆分json。

这是我的实际json,我想将此主体拆分成两个对象 而且我不知道如何在php laravel中做到这一点。

{
    "email": "shahzad@ovadamd.com",
    "password": "admin123",
    "password_confirmation": "admin123",
    "status": 0,
    "first_name": "Shahzad",
    "middle_name": "Hussain",
    "last_name": "Shah",
    "date_of_birth": "2015-01-01",
    "gender": "M",
    "area_id": 1,
    "address": "Minhatten NY",
    "city": "New York",
    "state": "Washington",
    "zip": "12312",
    "fax": "111-111-1111",
    "phone_extension": "2471",
    "work_phone": "111-111-1111",
    "phone_no": "111-111-1111",
    "emergency_contact": "111-111-1111",
    "social_security": "111-11-1111",
    "module_id": 1,
    "role_id": 1,
    "speciality_id": 1,
    "facility_id": 1,
    "priv_title": "can edit doctor",
    "priv_key": "ced",
    "display_group": "Doctor",
    "prev_id" :1
}

我想将json分成两个这样的对象:

{
    "user_profile": {
        "email": "shahzadg@ovadamd.com",
        "password": "admin123",
        "password_confirmation": "admin123",
        "status": 0,
        "first_name": "Shahzad",
        "middle_name": "Hussain",
        "last_name": "Shah",
        "date_of_birth": "2015-01-01",
        "gender": "M",
        "area_id": 1,
        "address": "Minhatten NY",
        "city": "New York",
        "state": "Washington",
        "zip": "12312",
        "fax": "111-111-1111",
        "phone_extension": "2471",
        "work_phone": "111-111-1111",
        "phone_no": "111-111-1111",
        "emergency_contact": "111-111-1111",
        "social_security": "111-11-1111",
        "module_id": 2,
        "role_id": 1
        },

    "prev":{

        "speciality_id": 1,
        "facility_id": 1,
        "priv_title": "can edit doctor",
        "priv_key": "ced",
        "display_group": "Doctor",
        "prev_id" :1
    }
}

我们将非常感谢您的帮助!

     $body = $request->all();

    $userProfile = $body['user_profile'];
    $userPrev = $body['prev'];

    $bodyObj = array_merge($userProfile, $userPrev);
    $bodyObj['token'] = $body['token'];

    $validator = UserValidations::validateUser($request->all());


           public function register(Request $request) {
    $body = $request->all();

    $userProfile = $body['user_profile'];
    $userPrev = $body['prev'];

    $bodyObj = array_combine($userProfile, $userPrev); array_chunk($body,true);
    $bodyObj['token'] = $body['token'];

    $validator = UserValidations::validateUser($bodyObj);

    if ($validator->fails()) {
        return response([
            'status' => false,
            'message'   => __('messages.validation_errors'),
            'errors' => $validator->errors()->all()
        ], 200);
    }

    DB::beginTransaction();

    try{

        $token = JWTAuth::getToken();
        $apy = JWTAuth::getPayload($token)->toArray();
        $request->merge(['module_id' => $apy['module_id']]);
        $request->request->add(['created_by' => Auth::user()->id]);
        $request->merge(['password' =>  bcrypt($request->input('password'))]);
        $user = $this->user->create($request->only($this->user->getModel()->fillable));
        $request->request->add(['user_id' => $user->id]);
        $this->userBasicInfo->create($request->only($this->userBasicInfo->getModel()->fillable));
        $this->userContactDetails->create($request->only($this->userContactDetails->getModel()->fillable));
        $this->userAccessModule->create($request->only($this->userAccessModule->getModel()->fillable));
        $this->userRoles->create($request->only($this->userRoles->getModel()->fillable));
        $this->verifyUser->create(['user_id' => $user->id, 'token' => str_random(40)]);

        $this->userSpeciality->create($request->only($this->userSpeciality->getModel()->fillable));
        $this->userFacility->create($request->only($this->userFacility->getModel()->fillable));
        $this->userDefinition->create($request->only($this->userDefinition->getModel()->fillable));
        $this->userPrev->create($request->only($this->userPrev->getModel()->fillable));


        Mail::to($user->email)->send(new VerifyMail($user));

        DB::commit();

        return response([
            'status' => true,
            'message' => 'User registered successfully',
        ], 200);

    } catch(\Exception $ex) {
        DB::rollback();
        return response([
            'status' => false,
            'message' => __('messages.validation_errors'),
            'errors' => $ex->getMessage(),
        ], 500);
    }
}

1 个答案:

答案 0 :(得分:0)

将字符串解码为数组,然后使用array_chunk将其拆分。
不要忘记第三个参数来保存密钥。
然后使用array_combine使数组具有关联性。

$arr = array_combine(["user_profile", "prev"], array_chunk(json_decode($json, true),22, true));
var_dump($arr);

返回:

array(2) {
  ["user_profile"]=>
  array(22) {
    ["email"]=>
    string(19) "shahzad@ovadamd.com"
    ["password"]=>
    string(8) "admin123"
    ["password_confirmation"]=>
    string(8) "admin123"
    ["status"]=>
    int(0)
    ["first_name"]=>
    string(7) "Shahzad"
    ["middle_name"]=>
    string(7) "Hussain"
    ["last_name"]=>
    string(4) "Shah"
    ["date_of_birth"]=>
    string(10) "2015-01-01"
    ["gender"]=>
    string(1) "M"
    ["area_id"]=>
    int(1)
    ["address"]=>
    string(12) "Minhatten NY"
    ["city"]=>
    string(8) "New York"
    ["state"]=>
    string(10) "Washington"
    ["zip"]=>
    string(5) "12312"
    ["fax"]=>
    string(12) "111-111-1111"
    ["phone_extension"]=>
    string(4) "2471"
    ["work_phone"]=>
    string(12) "111-111-1111"
    ["phone_no"]=>
    string(12) "111-111-1111"
    ["emergency_contact"]=>
    string(12) "111-111-1111"
    ["social_security"]=>
    string(11) "111-11-1111"
    ["module_id"]=>
    int(1)
    ["role_id"]=>
    int(1)
  }
  ["prev"]=>
  array(6) {
    ["speciality_id"]=>
    int(1)
    ["facility_id"]=>
    int(1)
    ["priv_title"]=>
    string(15) "can edit doctor"
    ["priv_key"]=>
    string(3) "ced"
    ["display_group"]=>
    string(6) "Doctor"
    ["prev_id"]=>
    int(1)
  }
}

将数组拆分后,您可以使用json_encode()轻松地将其再次设为Json。
https://3v4l.org/Zp26m