2016-01-30 2 views
0

Мне нужно проверить полезную нагрузку JSON, чтобы содержать объект JSON для определенного поля. Насколько я вижу, объекты JSON и массивы JSON преобразуются в массивы PHP в Laravel's Illuminate\Http\RequestРазличать объект JSON и массив JSON в Laravel

См. Пример ниже.

Controller.php

private static function getType($o) { 
    if (is_object($o)) { 
     return "Object"; 
    } else if (is_array($o)) { 
     return "Array"; 
    } 
    return "Unknown"; 
} 

public function test(Request $request) { 
    $input = $request->all(); 
    $response = []; 
    foreach ($input as $key => $value) { 
     $response[$key] = Controller::getType($value); 
    } 
    return response()->json($response); 
} 

test это функция, получить хиты на запрос HTTP.

Вот пример запроса и ответа от Controller.php

Запрос

{ 
    "obj1": {}, 
    "obj2": { 
     "hello": "world" 
    }, 
    "arr1": [], 
    "arr2": ["hello world"] 
} 

Response

{ 
    "obj1": "Array", 
    "obj2": "Array", 
    "arr1": "Array",  
    "arr2": "Array" 
} 

Есть ли способ, что я могу проверить полей obj1 а также obj2 содержать только Объекты JSON здесь?

ответ

1

Laravel-х Illuminate\Http\Request декодирует запрос JSON в функции json с помощью

json_decode($this->getContent(), true)

Использование true для второго параметра $assoc делает json_decode преобразовать все объекты в ассоциативные массивы.

Я сделал следующие изменения в controller.php

$input = $request->all(); 

был изменен на

$input = json_decode($request->getContent()); 

Вот запрос образца и ответ от модифицированногоcontroller.php

Запрос

{ 
    "obj1": {}, 
    "obj2": { 
     "hello": "world" 
    }, 
    "arr1": [], 
    "arr2": ["hello world"] 
} 

Response

{ 
    "obj1": "Object", 
    "obj2": "Object", 
    "arr1": "Array", 
    "arr2": "Array" 
} 
Смежные вопросы